You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.8 KiB
Plaintext
49 lines
1.8 KiB
Plaintext
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
|
|
|
|
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;
|
|
|
|
|
|
--------------------
|
|
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
|
|
|