Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 

Re: Break-Game, Kugel auf Rechtecklanden lassen ...

  Alt 27. Jun 2008, 00:48
Genau wird dein Ball jedoch in den seltensten Fällen treffen, da er sich wahrscheinlich meist um mehr als nur einen Pixel pro Step bewegt. Die genauste Möglichkeit das in den Griff zu bekommen ist es, wenn du den Flugvektor den Balles nimmst, und die Gerade die er erzeugt mit der Kollisionsgeraden schneidest. Liegt der Schnittpunkt innerhalb des unskalierten Flugvektors, tritt zwischen dem letzten und nächsten Step die Kollision ein. Dann kannst du den Flugverktor an der Normalen der Kollisionsgeraden im Schnittpunkt spiegeln (Reflexion), und ihn um den restlichen Betrag den der vorige Flugvektor über die Kollisionsgerade hinaus geht in die neue Richtung verschieben. Damit hast du dann die Kollision "zwischen" zwei Steps korrekt berechnet, obwohl der Ball den Schläger niemals sichtbar berührt.

Der einfachere und ungenauere (meist aber ausreichende) Weg ist es, den Ball sobald der über die Kollisionsgerade hinaus ist, genau über diese zu platzieren, und fortan den reflektierten alten Flugvektor zum aktuellen zu machen. Damit erspart man sich die Schnittpunktbestimmung, und die Verhältnisbildung des Schnittpunktes zum Flugvektor, sowie ein paar Additionen. Nachteil der Variante ist, dass man den tatsächlichen Schnittpunkt ja nur noch approximiert, und nicht die exakte Flugbahn einhält. Dadurch kann das gerade bei hohen Geschwindigkeiten zu ruckartigem unerwarteten Verhalten führen.

Gruß,
Medium

Edit: Hab mal noch n Bildchen zu obigem gemacht. In Worten ist das glaube ich schwer nachvollziehbar.
Miniaturansicht angehängter Grafiken
kollision_449.gif  
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat