| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) | |
| Neuer User Registriert seit: Feb 2003 Ort: Schwabenländle
Beiträge: 98
| Geometrie...
Ich habe ein simples geometrisches Problem: gegeben ist ein Kreis (mittig auf der Bühne), von dem _x und _y sowie der Radius r bekannt sind. Nun möchte ich einen Punkt "dot" auf der Kreislinie platzieren, abhängig von einem Winkel a. Meine Rechnung sieht so aus: Zitat:
| |
| | |
| | #2 (permalink) |
| voidboy Registriert seit: Sep 2004 Ort: München
Beiträge: 5.588
|
Dürfte so klappen... PHP-Code: Geändert von rendner[i] (08-03-2006 um 10:21 Uhr) |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Feb 2003 Ort: Schwabenländle
Beiträge: 98
| zweite runde...
Es geht weiter, das Problem hat sich vergrößert. Ich verwende die Funktion drawWedge() um Kuchendiagramme zu erstellen. Was auch ganz gut funktioniert, aber... Ich möchte auf der Schnittstelle Winkelhalbierende/Kreisradius ein Label positionieren wofür ich die Funktion xOnRadius und yOnRadius (oben) verwende. Wenn man sich jetzt das Script anschaut, sitzt der Punkt manchmal in der Mitte, manchmal nicht. Z.B. sitzt der Punkt wunderbar in der Mitte, wenn man 270 als Winkel einstellt, ist aber weit vom Kuchen weg, wenn man 100 einstellt. Irgendwie muss das damit zusammenhängen, dass die Methode drawWedge() erst bei Winkel 90 anfängt zu zeichnen und auch noch entgegen dem Uhrzeigersinn, wohingegen xOnRadius und yOnRadius bei 0 anfangen und im Uhrzeigersinn verlaufen. Kann jemand dieses Kuddelmuddel auflösen und wie müsste ich welche Funktionen umschreiben, um in allen Funktionen ein und dieselben Variablen verwenden zu können? Code:
MovieClip.prototype.drawWedge = function(x, y, startAngle, arc, radius, yRadius) {
if (arguments.length<5) {
return;
}
this.moveTo(x, y);
if (yRadius == undefined) yRadius = radius;
var segAngle, theta, angle, angleMid, segs, ax, ay, bx, by, cx, cy;
if (Math.abs(arc)>360) arc = 360;
segs = Math.ceil(Math.abs(arc)/45);
segAngle = arc/segs;
theta = -(segAngle/180)*Math.PI;
angle = -(startAngle/180)*Math.PI;
if (segs > 0) {
ax = x+Math.cos(startAngle/180*Math.PI)*radius;
ay = y+Math.sin(-startAngle/180*Math.PI)*yRadius;
this.lineTo(ax, ay);
for (var i = 0; i<segs; i++) {
angle += theta;
angleMid = angle-(theta/2);
bx = x+Math.cos(angle)*radius;
by = y+Math.sin(angle)*yRadius;
cx = x+Math.cos(angleMid)*(radius/Math.cos(theta/2));
cy = y+Math.sin(angleMid)*(yRadius/Math.cos(theta/2));
this.curveTo(cx, cy, bx, by);
}
this.lineTo(x, y);
}
};
xOnRadius = function(x,r,a){
return x + r * Math.cos( Math.PI/180 * a );
}
yOnRadius = function(y,r,a){
return y + r * Math.sin( Math.PI/180 * a );
}
this.createEmptyMovieClip("kreis", 1);
this.kreis.lineStyle(1, 0xffcc00);
this.kreis.beginFill(0xffcc00, 100);
this.kreis.drawWedge(200, 200, 90, 360, 100);
this.kreis.endFill();
angle1 = 270; // hier bitte mal testweise 100 oder so eintragen...
this.createEmptyMovieClip("kreisausschnitt1", 2);
this.kreisausschnitt1.lineStyle(1, 0xff0000);
this.kreisausschnitt1.beginFill(0xff0000, 50);
this.kreisausschnitt1.drawWedge(200, 200, 0, angle1, 110);
this.kreisausschnitt1.endFill();
this.attachMovie("dot","dot1", 3); // ein kleiner Punkt mittig zentriert
this.dot1._x = XPosOnCircle(200, 110, angle1);
this.dot1._y = YPosOnCircle(200, 110, angle1); |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |