<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-x-formal">
	<id>https://glossar.hs-augsburg.de/w/index.php?action=history&amp;feed=atom&amp;title=Diskussion%3AKollisionsbehandlung_%28ActionScript%29</id>
	<title>Diskussion:Kollisionsbehandlung (ActionScript) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://glossar.hs-augsburg.de/w/index.php?action=history&amp;feed=atom&amp;title=Diskussion%3AKollisionsbehandlung_%28ActionScript%29"/>
	<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Diskussion:Kollisionsbehandlung_(ActionScript)&amp;action=history"/>
	<updated>2026-07-19T03:50:12Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in GlossarWiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Diskussion:Kollisionsbehandlung_(ActionScript)&amp;diff=11145&amp;oldid=prev</id>
		<title>Visus: Berechnung der Abprallgeschwindigkeit über das Skalarprodukt</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Diskussion:Kollisionsbehandlung_(ActionScript)&amp;diff=11145&amp;oldid=prev"/>
		<updated>2007-09-25T21:40:22Z</updated>

		<summary type="html">&lt;p&gt;Berechnung der Abprallgeschwindigkeit über das Skalarprodukt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Berechnung der Abprallgeschwindigkeit über das Skalarprodukt ==&lt;br /&gt;
&lt;br /&gt;
 dx = dx/len;&lt;br /&gt;
 dy = dy/len;&lt;br /&gt;
 a_sc = -avx * dx - avy * dy;&lt;br /&gt;
 b_sc = bvx * dx - bvy * -dy;&lt;br /&gt;
 a_cx = -dx * a_sc;&lt;br /&gt;
 a_cy = -dy * a_sc;&lt;br /&gt;
 b_cx = dx * b_sc;&lt;br /&gt;
 b_cy = dy * b_sc;&lt;br /&gt;
&lt;br /&gt;
Dabei muesste gelten:&lt;br /&gt;
 a_sc = -avx * dx - avy * dy = -1 (avx * dx + avy * dy)&lt;br /&gt;
 b_sc = bvx * dx - bvy * -dy = bvx * dx + bvy * dy&lt;br /&gt;
&lt;br /&gt;
wobei bei a_sc das negative Vorzeichen sinnlos ist, wenn:&lt;br /&gt;
 a_cx = -dx * a_sc&lt;br /&gt;
und analog mit y, denn:&lt;br /&gt;
 a_cx = dx * -a_sc = dx * -[-1 * (avx * dx + avy * dy)]&lt;br /&gt;
 =&amp;gt; a_cx = dx * (avx * dx + avy * dy)&lt;br /&gt;
Also &amp;quot;relativer Abstand mal Skalarprodukt des relativen Abstand- und Geschwindigkeitsvektors&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also muesste sich das ganze dazu vereinfachen lassen:&lt;br /&gt;
&lt;br /&gt;
 dx = dx / len;&lt;br /&gt;
 dy = dy / len;&lt;br /&gt;
 &lt;br /&gt;
 a_sc = avx * dx + avy * dy;&lt;br /&gt;
 b_sc = bvy * dy + bvy * dy;&lt;br /&gt;
 &lt;br /&gt;
 a_cx = dx * a_sc&lt;br /&gt;
 a_cy = dy * a_sc&lt;br /&gt;
 &lt;br /&gt;
 b_cx = dx * b_sc&lt;br /&gt;
 b_cy = dy * b_sc&lt;br /&gt;
&lt;br /&gt;
Wenn ich mich nicht irre, muesste das laut der Herleitung funktionieren. Der Algorithmus funktionierte bei meinen Versuchen leider nicht, wobei ich sagen muss, dass ich das ganze in C++ gemacht habe und dort meine Vector-Klasse (http://blog.visusnet.de/2007/09/12/vektoren-fuer-c-programmierer/) benutze, wodurch der Quellcode ziemlich anders aussieht. Hier mal im Vergleich:&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
  * Definitionen:&lt;br /&gt;
  * ObjectWrapper *objectA, *objectB;&lt;br /&gt;
  * Vector *positionA, *positionB;&lt;br /&gt;
  * Vector deltaPosition;&lt;br /&gt;
  * double scalarA, scalarB;&lt;br /&gt;
  */&lt;br /&gt;
 &lt;br /&gt;
 // dx = dx/len;&lt;br /&gt;
 // dy = dy/len;&lt;br /&gt;
 deltaPosition = (*positionA - *positionB);&lt;br /&gt;
 deltaPosition.Normalize();&lt;br /&gt;
 &lt;br /&gt;
 // Vorzeichenkorrektur, wuerde auch mit abs(),&lt;br /&gt;
 // also dem Betrag der Werte funktionieren.&lt;br /&gt;
 if (deltaPosition.x &amp;lt; 0)&lt;br /&gt;
 {&lt;br /&gt;
     deltaPosition.x *= -1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 if (deltaPosition.y &amp;lt; 0)&lt;br /&gt;
 {&lt;br /&gt;
     deltaPosition.y *= -1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // a_sc = -avx * dx - avy * dy;&lt;br /&gt;
 // b_sc = bvx * dx - bvy * -dy;&lt;br /&gt;
 // GetSpeed() liefert den Geschwindigkeitsvektor&lt;br /&gt;
 scalarA = deltaPosition * objectA-&amp;gt;GetSpeed();&lt;br /&gt;
 scalarB = deltaPosition * objectB-&amp;gt;GetSpeed();&lt;br /&gt;
 &lt;br /&gt;
 // a_cx = -dx * a_sc;&lt;br /&gt;
 // a_cy = -dy * a_sc;&lt;br /&gt;
 // b_cx = dx * b_sc;&lt;br /&gt;
 // b_cy = dy * b_sc;&lt;br /&gt;
 Vector tempSpeedA = deltaPosition * scalarA;&lt;br /&gt;
 Vector tempSpeedB = deltaPosition * scalarB;&lt;br /&gt;
 &lt;br /&gt;
 // element2.vx = bvx - (b_cx - a_cx) * v_bouncing;&lt;br /&gt;
 // element2.vy = bvy - (b_cy - a_cy) * v_bouncing;&lt;br /&gt;
 // element1.vx = avx - (a_cx - b_cx) * v_bouncing;&lt;br /&gt;
 // element1.vy = avy - (a_cy - b_cy) * v_bouncing;&lt;br /&gt;
 int bouncing = 1;&lt;br /&gt;
 &lt;br /&gt;
 objectA-&amp;gt;SetXSpeed(objectA-&amp;gt;GetXSpeed() - (tempSpeedB.x - tempSpeedA.x) * bouncing);&lt;br /&gt;
 objectA-&amp;gt;SetYSpeed(objectA-&amp;gt;GetYSpeed() - (tempSpeedB.y - tempSpeedA.y) * bouncing);&lt;br /&gt;
 objectB-&amp;gt;SetXSpeed(objectB-&amp;gt;GetXSpeed() - (tempSpeedA.x - tempSpeedB.x) * bouncing);&lt;br /&gt;
 objectB-&amp;gt;SetYSpeed(objectB-&amp;gt;GetYSpeed() - (tempSpeedA.y - tempSpeedB.y) * bouncing);&lt;br /&gt;
&lt;br /&gt;
Bei meinem C++-Quellcode schiessen die beiden Objekte wild durch den Raum, wenn sie aufeinander treffen, wobei ich feststellen konnte, dass der x Wert der Objekte abwechselnd positiv und negativ mit den selben Werten ist.&lt;br /&gt;
&lt;br /&gt;
Vielleicht habe ich das ganze auch nur falsch portiert. ... Bin fuer Hinweise dankbar ;-)&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Visus|Visus]] 23:40, 25. Sep. 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Visus</name></author>
	</entry>
</feed>