Re: Berührung 2er bewegter Kreise
25. Mai 2009, 16:45
Hast du schon mal was von Variablen gehört? Ein Edit ist nicht dazu da, Variablen zu speichern... Wenn du die aktuellen Werte anzeigen willst, wären Labels das richtige.
Zahlen wie "25" gehören auf keinen Fall (!) in den Code, in 2h weisst du nicht mehr, was die bedeuten, wenn du einen größeren Kreis benutzen willst, liegst du damit recht schnell auf der Nase.
Das mit der Kollision ist eigentlich ziemlich einfach. Du kannst die beiden Geraden, auf denen sich die Mittelpunkte bewegen, in Parameterform angeben:
g_1 : (x,y)+r*(vx,vy)
g_2 : (x',y')+s*(vx',vy')
Die beiden Kreise kollidieren, wenn der Abstand der geraden der Summe der Radien entspricht. In Abhängigkeit von der Position hast du einen Abstand von
d_x = (x+r*vx-x'-r*vx)
d_y = (y+r*vy-y'-s*vy')
d(r,s)=sqrt(d_x*d_x+d_y*d_y)
Dann löst du den Ausdruck d(r,s)=R_1+R_2 und hast zwei Mögliche Lösungen, wobei du die frühere Lösung wählst.
Wenn du das hast, kannst du dir sorgen um das Abprallen machen, da wirds schon ein bischen schwieriger, weil noch Rotationsmatrizen ins Spiel kommen (und für Fortgeschrittene auch noch unterschiedliche Massen).
@satty: Das mit Ellipsen wird SEHR unschön. Die Kollisionsberechnung dort für auf ein Polynom dritten Grades, dessen Lösung (ohne Approximative Verfahren) recht schwierig wird.
@Post 3: Hast du verstanden, was dein Code macht? Du tust so, als ob die Kugeln von senkrechten Wänden abprallen und nicht voneinander...
btw: Du hast schon die Variable verschx. Warum machst du diesen Murks mit den Casts in das Edit rein und wieder raus?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
|