Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-02-2008, 11:14   #1 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
Question Kurvenbewegung von Punkt zu Punkt

Hallo,

Und wieder Mal die Kreisfunktionen
Ich weiß ja, aber leider hat meine Suche hier nichts ergeben und meine Mathefähigkeiten halten sich in Grenzen.

Also mein Ziel ist recht einfach:
Ich möchte ein Objekt zu einem bestimmten Zielpunkt bewegen. Die Entfernung zu diesem Zielpunkt kann variieren. Aber der Knackpunkt ist, das Objekt soll sich nicht auf einer Geraden, sondern einer Kurve dorthin bewegen. Soll heißen, der Radius des Kreises auf dem die jeweilige Teilstrecke liegt, wird unterschiedlich sein.

Das höchste was ich mit Trigonometrie anstellen kann, ist Objekte, Kreise fliegen zu lassen. Leider hab ich keine Ahnung wie ich das anpassen kann.

Hoffe ihr habt einen Link oder gleich die Lösung parat.
Danke schon Mal
Angehängte Grafiken
Dateityp: jpg kreisbahn.jpg (18,9 KB, 15x aufgerufen)
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi
dark-future ist offline   Mit Zitat antworten
Alt 14-02-2008, 15:51   #2 (permalink)
obvious
 
Registriert seit: Dec 2007
Ort: Berlin
Beiträge: 125
Wenn es nicht so auf Genauigkeit ankommt kannst du das recht einfach mit zwei Tweens faken.

Für eine ähnliche Kurve wie auf deinem Bild zum Beispiel für x ein Tween mit easeIn (beschleunigt) und für y (bremst ab) ein Tween mit easeOut.

Ansonsten müsstest du einen Mittelpunkt für den Kreisboden definieren, der von beiden Punkten gleich weit entfernt ist (Radius), dann Anfangs- und Endwinkel berechnen und schließlich mit Sinus und Cosinus tweenen.
xisari ist offline   Mit Zitat antworten
Alt 14-02-2008, 16:15   #3 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
Hallo xisari,

Danke, eigentlich eine gute Idee und ich hätte grundsätzlich auch nichts gegen Fakes. Aber ich fürchte du verstehst da etwas falsch.

Es geht mir nicht um diese zwei Kurven auf dem Bild, das waren nur Beispiele. Es handelt sich um ein Spiel bei dem die Objekte an beliebigen Stellen auf dem Schirm beliebig große Strecken zurücklegen können. Das heißt, wenn ich nichts übersehen habe, kann man das schlecht Faken.

Kurz gesagt, es war von Anfang an meine Intention das ganze zu berechnen, wie mein Hinweis auf die Kreisfunktionen hätte ausdrücken sollen

Zitat:
Ansonsten müsstest du einen Mittelpunkt für den Kreisboden definieren, der von beiden Punkten gleich weit entfernt ist (Radius), dann Anfangs- und Endwinkel berechnen und schließlich mit Sinus und Cosinus tweenen.
Genau das will ich, leider weiß ich nicht wie, weil meine Wissen über Trigonometrie nicht gerade das üppigste ist.
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi
dark-future ist offline   Mit Zitat antworten
Alt 14-02-2008, 18:54   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
x = x_mittelpunkt + radius * sin(winkel);
y = y_mittelpunkt + radius * cos(winkel);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 14-02-2008, 21:19   #5 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
ActionScript:
  1. x = x_mittelpunkt + radius * sin(winkel);
  2. y = y_mittelpunkt + radius * cos(winkel);

Das wusste ich auch noch (Es sei denn mir ist ein Hinweis entgangen)
Danke für den Tipp, aber mir geht es weniger um die Theorie als die praktische Anwendung. Sprich, wie berechne ich aus den gegebenen Koordinaten this._x, this._y und sollX, sollY den korrekten Radius und den Start- sowie Endwinkel!?

Denn das ist ja das eigentliche Problem, sonst könnte ich einfach einen beliebigen Radius nehmen. Aber Start- und Endposition sind ja gegeben.

Das ist mir ein Rätsel und ich kann auch schlecht danach suchen, denn ich finde ständig nur Beschreibungen wie man eine komplette Kreisbahn berechnet. Aber nicht nur ein Teilstück, das zwei gegebene Punkte verbinden soll
Hoffe das war jetzt verständlich. xisari hatte das schon richtig erkannt, nur leider fehlt mir noch eine Erklärung oder ein Beispiel zur Anwendung des ganzen.
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi

Geändert von dark-future (14-02-2008 um 21:22 Uhr)
dark-future ist offline   Mit Zitat antworten
Alt 15-02-2008, 13:09   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
Zitat:
Zitat von dark-future Beitrag anzeigen
..wie berechne ich aus den gegebenen Koordinaten this._x, this._y und sollX, sollY den korrekten Radius und den Start- sowie Endwinkel!?..
durch 2 punkte kann man unendlich viele kreise ziehen.
um einen kreis fest zu definieren, benötigst man 3 punkte.

http://www.seibsprogrammladen.de/fra...on/Mathe/flash
auf den gelben button klicken
-> kreis durch 3 punkte
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 15-02-2008, 13:41   #7 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
Zitat:
Zitat von hgseib Beitrag anzeigen
durch 2 punkte kann man unendlich viele kreise ziehen.
um einen kreis fest zu definieren, benötigst man 3 punkte.
Ok, das wusste ich nicht.
Dann sehe ich zwei Möglichkeiten dennoch einen Kreis zu bilden:
  1. Man nimmt an, dass die beiden Punkte den Durchmesser des Kreises bilden.
    (Schlecht, denn der resultierende Bogen wäre viel zu groß)
  2. Man bildet mit den bestehenden Punkten ein gleichschenkliges Dreieck um den dritten Punkt zu bekommen.
    (Würde, denke ich, in einem akzeptablen Bogen resultieren)

Werde mir deinen Link Mal etwas genauer zu Gemüte führen, denn leider ist mir das ganze noch sehr suspekt und scheint mir hoch kompliziert.
Schande über mein Haupt

Versuche jetzt irgendwie den zweiten Weg umzusetzen. Mal sehen wo ich Infos zur Bildung eines gleichschenkligen Dreiecks finde.
Tipps sind mir nach wie vor willkommen.
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi
dark-future ist offline   Mit Zitat antworten
Alt 15-02-2008, 14:09   #8 (permalink)
CodeGecko
 
Benutzerbild von hellslawyer
 
Registriert seit: Aug 2007
Ort: Hagen
Beiträge: 1.242
Gleichschenklig dürfte Dich nicht weiterbringen. Ich denke Du meinst eher gleichseitig. Gleichseitige Dreiecke sind recht einfach zu bilden, da die Seiten (wie der Name schon sagt) alle gleich lang sind und jeder der drei Winkel genau 60 Grad beträgt.
__________________
Grütze Reinhart

XING || Simple Flash-Filter-Generator || DateChooser (AS3)
MovieClipLoader-Example (AS2) || PreloaderClass (AS2) || Framechecker-Component (AS2)

Bitte keine Flashfragen per PN oder ICQ. Dafür ist das Forum da.
hellslawyer ist offline   Mit Zitat antworten
Alt 15-02-2008, 14:13   #9 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
ja, mach mal.

bei 2 punkte plus radius gibt es:
- entweder keine lösung, wenn der radius kleiner ist als der halbe abstand der punkte
- oder zwei lösungen. die mitte kann links oder rechts von der verbindungslinie liegen

du brauchst einen 3. mann zum skatspielen.


Zitat:
Zitat von hellslawyer Beitrag anzeigen
Gleichschenklig dürfte Dich nicht weiterbringen.
das schon. strecke p1-p2 halbieren und eine linie im rechten winkel da durch ziehen. jeder punkt auf dieser linie wäre einer der gewünschten kreismittelpunkte (mit r > strecke (p1-p2)/2 ).
aber wie schon geschrieben. es gibt links wie rechts lösungen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (15-02-2008 um 15:38 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 15-02-2008, 14:30   #10 (permalink)
CodeGecko
 
Benutzerbild von hellslawyer
 
Registriert seit: Aug 2007
Ort: Hagen
Beiträge: 1.242
Zitat:
Zitat von hgseib Beitrag anzeigen
das schon. strecke p1-p2 halbieren und eine linie im rechten winkel da durch ziehen. jeder punkt auf dieser linie wäre einer der gewünschten kreismittelpunkte (mit r > strecke (p1-p2)/2 ).
aber wie schon geschrieben. es gibt links wie rechts lösungen.
Das ist natürlich völlig richtig. Ich dachte dabei aber an eine eindeutige Lösung

Zum Problem zurück: Mit der Problematik der Kreisbildung hat sich der olle Apollonios seiner Zeit auseinandergesetzt. Neben dem schönen Beispiel auf hgseibs Seite gibt es dazu noch nen schönen Wiki-Artikel.
__________________
Grütze Reinhart

XING || Simple Flash-Filter-Generator || DateChooser (AS3)
MovieClipLoader-Example (AS2) || PreloaderClass (AS2) || Framechecker-Component (AS2)

Bitte keine Flashfragen per PN oder ICQ. Dafür ist das Forum da.
hellslawyer ist offline   Mit Zitat antworten
Alt 15-02-2008, 15:32   #11 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
Zitat:
Zitat von hellslawyer Beitrag anzeigen
Ich dachte dabei aber an eine eindeutige Lösung
Ich meinte natürlich auch gleichseitig und nicht gleichschenklig, sorry

Zwischenstand:
ActionScript:
  1. sx = Math.abs(this._x - this.tx);
  2. sy = Math.abs(this._y - this.ty);
  3. a = Math.sqrt(Math.pow(sx, 2) + Math.pow(sy, 2));
  4. this.ru = (1/3) * Math.sqrt(3) * a;
  5.    
  6. w = Math.atan(sx / sy);
  7. x4 = (this._x + this.tx) / 2;
  8. y4 = (this._y + this.ty) / 2;
  9.    
  10. this.mx = x4 - Math.cos(w);
  11. this.my = y4 - Math.sin(w);
this.ru ist der Radius des Umkreises.
this.mx/my ist der Schwerpunkt.

Mir fehlt jetzt noch ein Ansatz zur Bestimmung der Winkel.
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi
dark-future ist offline   Mit Zitat antworten
Alt 15-02-2008, 16:19   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
du rechenst doch schon deine winkel aus.

selbe rechnung für
anfang = der winkel vom mittelpunkt zum 1.punkt
ende = der winkel vom mittelpunkt zum 2.punkt

p.s.
w = Math.atan(sx / sy);
besser
w = Math.atan2(sx , sy);


da hab ich noch was gefunden:
http://www.seibsprogrammladen.de/fra...ispiele/flash6
-> bewegen
von Punkt a nach Punkt b im Bogen bewegen
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 18-02-2008, 10:15   #13 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
Talking

Sorry fürs pushen.

Wollte nur noch kurz ein großes Dank ausrichten!

Hatte etwas Zeitmangel und konnte noch nicht weiter machen. Die Winkel die ich brauche rechne ich ja noch nicht aus, aber mit atan2 sind das zwei Zeilen und ich hab' meine Winkel.
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi
dark-future ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele