| |||||||
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
|
Hallo! Ich hab das Problem zwar schon mal angesprochen, aber irgendwie scheint es niemand zu geben, der eine Lösung dafür hat. Dabei ist es - eigentlich - ganz einfach: Ich habe einen Punkt, der auf einem Kreis steht. Nun möchte ich wissen, in welchem Winkel der Punkt zum Kreismittelpunkt M steht. Dazu habe ich den Kreis in 4 Quadranten eingeteilt... Einfach mal anschauen, normalerweise sollte die Funktion circA den korrekten Winkel ausgeben, tut sie aber nicht. Kann doch nicht sein, dass da keiner eine Antwort parat hat... ???? Code: /*
mx = _x vom Kreismittelpunkt M
my = _y vom Kreismittelpunkt M
px = _x vom Punkt, der auf U liegt
py = _y vom Punkt, der auf U liegt
*/
Math.circA = function(mx, my, px, py){
var a = 270;
if (px>mx && py > my) {
a = Math.atan(Math.abs(px-mx)/Math.abs(my-py));
} else {if (px<mx && py>my) {
a = 180 - Math.atan(Math.abs(mx-px)/Math.abs(my-py));
} else {if (px<mx && py<my) {
a = 180 + Math.atan(Math.abs(mx-px)/Math.abs(py-my));
} else {
a = 360 - Math.atan(Math.abs(px-mx)/Math.abs(py-my));
}}}
trace("circA() " + arguments.toString() + " = " + a);
return a;
}
/* 1. Punkt auf den Winkel setzen, z.B. auf 225 Grad
Der Kreismittelpunkt steht bei 160/160, Radius ist 100
*/
this.dot._x = 160 + 100 * Math.cos(225 * (Math.PI / 180));
this.dot._y = 160 + 100 * Math.sin(225 * (Math.PI / 180));
// 2. Winkel von Punkt "dot" berechnen
trace(Math.circA(160, 160, this.dot._x, this.dot._y)); |
| | |
| | #2 (permalink) |
| dreizeiler Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 1.411
|
mmmm warum denn so kompliziert? PHP-Code: Geändert von mojave (11-03-2006 um 14:41 Uhr) |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Feb 2003 Ort: Schwabenländle
Beiträge: 98
|
Hallo mojave, bin ja gespannt ob das funktioniert! Danke erst mal für die Antwort!!!! Irgendwas scheint aber nicht zu stimmern in der Funktion, ich habe mal "degreesToRichtpunkt" in "radiansToRichtpunkt" umbenannt und dann sieht das so aus, gibt aber "undefined " zurück...? Stimmen bei mir die Punkte nicht, Du verwendest bei Dir andere Bezeichner... Code:
function radiansToDegrees(radian) {
return degree=radian*180/Math.PI;
}
Math.circA = function(mx, my, px, py){
var radiansToRichtpunkt = Math.atan2((py-my),(px-mx));
var meinWinkel = radiansToDegrees(radiansToRichtpunkt)-90;
return a;
}
this.dot._x = 160 + 100 * Math.cos(225 * (Math.PI / 180));
this.dot._y = 160 + 100 * Math.sin(225 * (Math.PI / 180));
trace(Math.circA(160, 160, this.dot._x, this.dot._y)); |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Feb 2003 Ort: Schwabenländle
Beiträge: 98
|
Ja, hast Recht, hätte ich das Manual gelesen, hätte ich mir viele Stunden! Ärger gespart... Darf ich Dich gleich nochmal anhauen? Ich versuche einer Funktion "slideToAngle" zu erklären, dass sie einen Punkt zum Winkel a2 schieben soll. Irgendwie bekomme iuch nur undefined und infinite und so was raus, aber der Punkt bleibt immer stehen... Code:
function radiansToDegrees(radian) {
return degree=radian*180/Math.PI;
}
Math.circA = function(mx, my, px, py){
var radiansToRichtpunkt = Math.atan2((py-my),(px-mx));
var a = radiansToDegrees(radiansToRichtpunkt)-90;
return a;
}
MovieClip.prototype.slideToAngle = function(x1, y1, a2, r, duration){
var startangle = Math.circA(x1, x2, this._x, this._y);
function slideto(mc, x1, y1, a1, a2, r, duration, t){
clearInterval(id);
var a = Math.easeInOutCirc(t, a1, a2-a1, duration);
trace("slideToAngle() " + arguments.toString() + " = " + a);
mc._x = x1 + r * Math.cos(a * (Math.PI / 180));
mc._y = y1 + r * Math.sin(a * (Math.PI / 180));
updateAfterEvent();
t++;
if (t < duration+1) id = setInterval(slideto, 10, mc, x1, y1, a, a2, r, duration, t);
}
var id = setInterval(slideto, 10, this, x1, y1, startangle, a2, r, duration, 0);
}
this.dot.slideToAngle(160, 160, 30, 100, 100); |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Feb 2003 Ort: Schwabenländle
Beiträge: 98
|
Und schon wieder muss ich mcih für den unnötigenThread entschuldigen, irgendwie hat es jetzt doch ganz plötzlich geklappt... Hier ist die Lösung: Code:
function radiansToDegrees(radian) {
return degree=radian*180/Math.PI;
}
Math.circA = function(mx, my, px, py){
var radiansToRichtpunkt = Math.atan2((py-my),(px-mx));
var a = radiansToDegrees(radiansToRichtpunkt)-90;
return a;
}
MovieClip.prototype.slideToAngle = function(x1, y1, a2, r, duration){
var startangle = Math.circA(x1, x2, this._x, this._y);
function slideto(mc, x1, y1, a1, a2, r, duration, t){
clearInterval(id);
var a = Math.easeInOutCirc(t, a1, a2-a1, duration);
trace("slideToAngle() " + arguments.toString() + " = " + a);
mc._x = x1 + r * Math.cos(a * (Math.PI / 180));
mc._y = y1 + r * Math.sin(a * (Math.PI / 180));
updateAfterEvent();
t++;
if (t < duration+1) id = setInterval(slideto, 10, mc, x1, y1, a, a2, r, duration, t);
}
var id = setInterval(slideto, 10, this, x1, y1, 225, a2, r, duration, 0);
}
this.dot._x = 160 + 100 * Math.cos(225 * (Math.PI / 180));
this.dot._y = 160 + 100 * Math.sin(225 * (Math.PI / 180));
this.dot.slideToAngle(160, 160, 30, 100, 50); |
| | |
| | #8 (permalink) |
| dreizeiler Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 1.411
|
ohne das jetzt genau gelesen zu haben sehe ich schon mal, dass du der funktion gar kein parameter x2 übergibst. dan kann der aufruf PHP-Code: |
| | |
| | #10 (permalink) | |
| Neuer User Registriert seit: Feb 2003 Ort: Schwabenländle
Beiträge: 98
| Zitat:
Danke für Deine Hilfe! Ehrlich: Mein erster Thread im Flashforum wo mir geholfen wurde! Ich freu mich! | |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Feb 2003 Ort: Schwabenländle
Beiträge: 98
|
Muss jetzt doch ncohmal posten, das ist mir echt zu hoch. Ich habe an den Funktionen selbst nichts verändert und es tut sich dennoch nix, die Funtkion circA spuckt jetzt nur noch NAN aus...? Code: function prd(name){
this.name = name;
}
this.products = [];
this.products.push(new prd("karte1"));
this.products.push(new prd("karte2"));
this.products.push(new prd("karte3"));
Math.easeInOutBack = function (t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
};
function radiansToDegrees(radian) {
return degree=radian*180/Math.PI;
}
Math.circA = function(mx, my, px, py){
var radiansToRichtpunkt = Math.atan2((py-my),(px-mx));
var a = radiansToDegrees(radiansToRichtpunkt)-90;
return a;
}
MovieClip.prototype.slideToAngle = function(x1, y1, a2, r, duration){
var startangle = Math.circA(x1, x2, this._x, this._y);
trace("startangle: " + startangle);
function slideto(mc, x1, y1, a1, a2, r, duration, t){
clearInterval(id);
var a = Math.easeInOutBack(t, a1, a2-a1, duration, .6);
//trace("slideToAngle() " + arguments.toString() + " = " + a);
mc._x = x1 + r * Math.cos(a * (Math.PI / 180));
mc._y = y1 + r * Math.sin(a * (Math.PI / 180));
updateAfterEvent();
t++;
if (t < duration+1) id = setInterval(slideto, 10, mc, x1, y1, a, a2, r, duration, t);
}
var id = setInterval(slideto, 10, this, x1, y1, startangle, a2, r, duration, 0);
}
for (var i=0; i < products.length; i++) {
this.attachMovie("dot", "dot"+i, this.getNextHighestDepth(), {index:i, n:products.length});
this["dot"+i]._x = 160 + 100 * Math.cos((360/products.length*i) * (Math.PI / 180));
this["dot"+i]._y = 160 + 100 * Math.sin((360/products.length*i) * (Math.PI / 180));
this["dot"+i].onRelease = function(){
for (var i=0; i < this.n; i++) {
var angle = 360/this.n*i + (360/this.n*index);
if (i != index) this._parent["dot"+i].slideToAngle(160, 160, angle, 100, 120);
}
}
} |
| | |
| | #12 (permalink) |
| dreizeiler Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 1.411
|
dein x2 ist ja auch immer noch nicht initialisiert. PHP-Code: |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |