2009-10-13 6 views
5

Opracowałem metodę sprawdzania, czy dwa jednowymiarowe odcinki/zakresy linii.Jednowymiarowe segmenty linii/zakresy Test przecięcia: nazwa rozwiązania?

więc definiując zakres jak:

[min, max] 

Biorąc pod uwagę dwa przypadki zakresem:

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

używam następujących czynności, aby sprawdzić, czy one przecinają:

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

myślę, że to jest jednowymiarowym produktem krzyżowym, więc moje pytanie brzmi:

Czy to rozwiązanie jest klasyfikowane jako jednowymiarowy produkt krzyżowy lub coś innego?

+0

Uogólnienie produktów krzyżowych jest produktem klinowym, który wytwarza zewnętrzną algebrę przestrzeni wektorowej. https://en.wikipedia.org/wiki/Exterior_algebra –

Odpowiedz

8

Jak o:

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

to szybciej (nie mnożyć zaangażowany i przyzwoity kompilator optymalizuje NOT away) i tak samo czytelne.

+0

Ładne rozwiązanie Aaron, zgadzam się, że jest jaśniejsze niż moje rozwiązanie, myślę, że użyję tego zamiast mój kod :) –

1

Jednowymiarowy produkt krzyżowy to tylko x*y dla x i y obu liczb rzeczywistych. Sądzę, że można nazwać to jednowymiarowym produktem krzyżowym, ale to tylko wymyślna nazwa mnożenia.

To urocza sztuczka, ale nie sądzę, że ma ona jakieś specjalne konsekwencje matematycznie. Produkty krzyżowe dotyczą wyłącznie wektorów, a nie segmentów linii.

+0

Dzięki Peter, tak właśnie szukałem fantazyjnej nazwy :) –