Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-08-2004, 11:38   #1 (permalink)
io pan
 
Registriert seit: Mar 2002
Ort: Basel
Beiträge: 86
Question Abprall im Kreis berechnen

Ich sitze vor einem vollgekritzelten Blatt und versuche mich an die gute Trigonometrie zu erinnern..
Vielleicht kann mir da jemand formelmässig helfen:

Situation:
Eine Kugel rollt innerhalb eines Kreises mit Radius r. Richtung und Geschwindigkeit der Kugel sind durch den Vektor v[x,y] definiert. Die Kugel prallt elastisch vom Rand des Kreises ab, ohne Geschwindigkeit zu verlieren.

Frage:
Wie sieht jetzt der Geschwindigkeitsvektor v der Kugel aus, nachdem sie an der Stelle (x,y) mit dem Kreis (mit Radius r, gell) kollidiert?

Das wär toll, wenn das grad jemand wissen tät

Stefan
mehlkelm ist offline   Mit Zitat antworten
Alt 31-08-2004, 13:14   #2 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
öööhm, sie verliert doch nicht an geschwindigkeit?

aber wenn sie das soll, würde ich das einfach in einer variable angeben, und nach jedem zusammenstoß einfach ne bestimmte zahl von der variable abziehen.
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Alt 31-08-2004, 13:25   #3 (permalink)
io pan
 
Registriert seit: Mar 2002
Ort: Basel
Beiträge: 86
Das ist im Prinzip egal, ob die Kugel an Geschwindigkeit verliert oder nicht. Viel wichtiger ist die Richtung, in die die Kugel rollt/fliegt, nachdem sie die Kreisinnenseite berührt hat.

Vielleicht möchte ja jemand kommentieren, was ich bisher hab, da stimmt die richtung einfach nicht.. (siehe fla)

Stefan

Edith sagt, dass die berechnung im MC "KaliumIon" stattfindet (frame 2)
Angehängte Dateien
Dateityp: zip potential.fla.zip (3,6 KB, 26x aufgerufen)

Geändert von mehlkelm (31-08-2004 um 13:30 Uhr)
mehlkelm ist offline   Mit Zitat antworten
Alt 31-08-2004, 14:12   #4 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Hi.

Alleine schon mal den Code in der .fla zu finden,
ist für mich unmöglich

Sauber programmiert, liegt der ganze Code, soweit möglich,
auf der *HZL im ersten Frame. Am besten in der obersten Ebene.



*HZL= Hauptzeitleiste
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 31-08-2004, 14:18   #5 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
Hi,

eigentlich ist es ganz simpel:
du denkst dir am Kollisionspunkt am Kreis eine Tangente. Diese hat einen Winkel. Bei der Kollision gilt üblicherweise Eingangswinkel=Ausgangswinkel. Das ist ja recht einfach zu berechnen...

Schwieriger ist es indes herauszufinden, wo genau die Kugel den Kreis trifft, d.h., welchen Winkel deine Tangente hat.
Da du in diesem Fall einen Kreis mit bekannter Größe verwendest, dürfte auch das nicht so schwierig sein:

zunächst berechnest du den Abstand der Kugel zum Zentrum mit
da = Math.sqrt(x*x+y*y);

wenn dieser Abstand größer oder gleich dem Radius ist, ermittelst du den Winkel der Kugel zum Zentrum mit:

dw = Math.atan2(dy,dx);
// dy und dx sind die Differenzen der Position der Kugel und des Zentrums)

Die Tangente steht lotrecht auf diesem Winkel.
Zuletzt brauchst du noch den Richtungswinkel der Kugel. Hierzu nimmst du wieder Math.atan2, diesmal aber nicht mit dem Abstand zum Zentrum sondern mit dem Abstand zur vorherigen Position der Kugel:

w = Math.atan2(_y-lastY,_x-lastX);

lastX und lastY musst du einfach in jeder Iteration deines Skripts speichern.
Jetzt hast du sowohl den Winkel der Kugel als auch den Winkel der Tangente, quasi deiner Spiegelfläche. Damit solltest du dann zurechtkommen, oder?!

Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 31-08-2004, 14:23   #6 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ ludabruda

Muss ich sowas auch wissen um als schlau zu gelten?
*heul*
Wahnsinn!
Hast Du mit Mathe viel am Hut?
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 31-08-2004, 14:35   #7 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
@thebiz: ja, wer das nicht weiß ist doof
nein, Quatsch. Ich habe mich nur des öfteren mit Kollisionsproblemen auseinandergesetzt. Da Flash hier nicht viel bietet, muss man sich anderer Dinge behelfen. Du überlegst dir, was du willst und schaust, was du hast und versuchst, das irgendwie miteinander zu verbinden.

Das ist ja letztlich auch nur eine Lösung, die in diesem speziellen Fall funktioniert. Sobald du Bezier-Kurven hast, wird das wesentlich schwieriger.



Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 31-08-2004, 14:43   #8 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ ludabruda

Danke.
Hast es echt faustdick hinter den Ohren
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 31-08-2004, 14:50   #9 (permalink)
aka stauby
 
Benutzerbild von webdust
 
Registriert seit: Mar 2004
Ort: Würzburg
Beiträge: 705
Noch ne kleine Ergänzung:
Ich glaube fast, es geht noch einfacher, wenn man den Geschwindigkeitsvektor zunächst in eine Komponente senkrecht und eine parallel zum Einfallslot (=Radius) zerlegt. Denn mit der senkrechten passiert dann nix und die parallele ändert nur ihr Vorzeichen.
__________________
"The things you own end up owning you."
webdust ist offline   Mit Zitat antworten
Alt 31-08-2004, 14:55   #10 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ webdust

Das würde ich ja gerne mal live sehe,
wie das gehen soll.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 31-08-2004, 15:29   #11 (permalink)
io pan
 
Registriert seit: Mar 2002
Ort: Basel
Beiträge: 86
danke aber so gehts auch

Was meint ihr zu der Lösung?
r = Winkel zw. Zentrum und Kollisionspunkt
v = Geschwindigkeitsvektor der Kugel
alpha = einfallswinkel (zw. r und v)
beta = winkel, um den v gedreht werden muss

Code:
rx = this._x - zentrum._x;
ry = this._y - zentrum._y;
vx = geschw.x;
vy = geschw.y;

cosalpha = (rx * vx + ry * vy) / (Math.sqrt(rx*rx+ry*ry)*Math.sqrt(vx*vx+vy*vy));
alpha = Math.acos(cosalpha);
	
beta = Math.PI - 2 * alpha;
	
nvx = Math.cos(beta) * vx - Math.sin(beta) * vy;
nvy = Math.sin(beta) * vx + Math.cos(beta) * vy;
ihr wart inspirierend

Stefan
mehlkelm ist offline   Mit Zitat antworten
Alt 31-08-2004, 15:41   #12 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ mehlkelm

Ich denke wir werden heimlich sortiert
und ich bin nicht bei denen dabei, die
solche Dinge berechnen können.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 31-08-2004, 16:09   #13 (permalink)
aka stauby
 
Benutzerbild von webdust
 
Registriert seit: Mar 2004
Ort: Würzburg
Beiträge: 705
Zitat:
Zitat von thebiz
@ webdust

Das würde ich ja gerne mal live sehe,
wie das gehen soll.
Ok, weil Du´s bist.
Im Endeffekt ist das nichts anderes, als eine Transformation von kartesischen- in ebene Polar-Koordinaten: klick

Edit: Und wehe, es sagt jemand was über meine Handschrift!!
__________________
"The things you own end up owning you."

Geändert von webdust (31-08-2004 um 16:10 Uhr)
webdust ist offline   Mit Zitat antworten
Alt 31-08-2004, 16:14   #14 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Was für ein gekritzel! *spässle*

Also tut mir Leid, Mathe liegt bei mir schon etwas
zurück. Bis ich das verstanden habe, vergehen
sicherlich Stunden.
Ich dachte es wäre irgendwie etwas einfaches.

Edit:
Habe mir das nochmal angeschaut. Das mit den Vektoren,
kommt mir aus dem Elektro.Technik Studium bekannt vor,
das ich geschmissen habe.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------

Geändert von thebiz (31-08-2004 um 16:16 Uhr)
thebiz ist offline   Mit Zitat antworten
Alt 31-08-2004, 16:20   #15 (permalink)
aka stauby
 
Benutzerbild von webdust
 
Registriert seit: Mar 2004
Ort: Würzburg
Beiträge: 705
Gut möglich. Solche Koordinatentransformationen machen wir sehr gerne in Physik. Und soweit ist ja eine Elektrotechnik-Studium nicht umbedingt von der Physik entfernt.
Der Vorteil ist halt, wenn man das in geeigneten Koordinaten ansetzt, man ähnliche Probleme nach dem gleichen Schema für Kugeln, Zylindern, Ellipse, etc. berechnen könnte.
__________________
"The things you own end up owning you."
webdust 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 04:02 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele