Geometrie und Topologie
Fakultät für Mathematik
Technische Universität München

Kollisionstest durch Determinanten-Vorzeichen

Wie wir bereits gesehen haben, lässt sich die konvexe Hülle allein mit den Vorzeichen von Determinanten bestimmen. Können wir die Kollision zweier Strecken mithilfe von Determinanten bestimmen?

Eine Gerade durch $v$ und $w$ schneidet eine Strecke $t u$ (ohne Endpunkte), wenn $t$ und $u$ auf unterschiedlichen Seiten der Geraden liegen. Dies ist genau dann der Fall, wenn $\det(v,w,u) \cdot \det(v,w,t) < 0$, also die beiden Determinanten ein verschiedenes Vorzeichen haben oder die Umlaufsinne der jeweiligen drei Punkte verschieden sind. Die Punkte werden jeweils mit einer zusätzlichen 1 im letzten Eintrag in die 3x3-Determinante eingesetzt.

Ebenso schneidet eine Gerade durch $t$ und $u$ die Strecke $v w$, falls $\det(u,t,v)\cdot \det(u,t,w) < 0$.

Genau dann wenn beide Bedingungen gleichzeitig erfüllt sind, so schneiden sich die beiden Strecken $t u$ und $v w$.

In dem folgendem Applet werden die Segmente genau im Schnittfall rot (andernfalls grün) gezeichnet

Dies wurde durch folgenden Code bewerkstelligt.

collision(A,B,C,D):=
  and(
    det(A,B,C)*det(A,B,D)<0,
    det(C,D,A)*det(C,D,B)<0
  );
if(collision(v,w,u,t),
  a.color=b.color=(1,0,0); //rot
,// else
  a.color=b.color=(0,1,0); //grün
);