2009-10-13 10 views
5

Ich habe eine Methode ausgearbeitet, um zwei eindimensionale Liniensegmente/Bereiche zu testen.Eindimensionale Liniensegmente/Bereiche Schnittpunkttest: Lösungsname?

definieren So eine Reihe wie:

[min, max] 

zwei Instanzen Gegeben:

a = [min, max] 
b = [min, max] 

ich folgendes zu testen, ob sie sich überschneiden:

(a.max - b.min) * (b.max - a.min) >= 0. 

ich nachdenken ist ein eindimensionales Kreuzprodukt, so ist meine Frage:

Wird diese Lösung als eindimensionales Kreuzprodukt oder etwas anderes klassifiziert?

+0

Die Verallgemeinerung von Kreuzprodukten ist das Keilprodukt, das die äußere Algebra eines Vektorraums erzeugt. https://en.wikipedia.org/wiki/Exterior_algebra –

Antwort

8

Wie wäre:

intersects = !((a.max < b.min) || (b.max < a.min)) 

, die schneller ist (kein mehrfach beteiligt und ein anständiger Compiler wird die NICHT weg optimieren) und ebenso lesbar.

+0

Schöne Lösung Aaron, ich stimme zu, es ist klarer als meine Lösung, ich denke, ich werde das stattdessen verwenden mein Code :) –

1

Ein eindimensionales Kreuzprodukt ist lediglich x*y für x und y beide reellen Zahlen. Ich nehme an, man könnte dies ein eindimensionales Kreuzprodukt nennen, aber das ist nur ein fantastischer Name für eine Multiplikation.

Es ist ein niedlicher Trick, aber ich denke nicht, dass es mathematisch eine spezielle Konsequenz hat. Bei Cross-Produkten dreht sich alles um Vektoren, nicht um Liniensegmente.

+0

Danke Peter, yea Ich war nur auf der Suche nach einem fantastischen Namen :) –

Verwandte Themen