2011-03-08 12 views
7

Okej, więc próbuję uzyskać algorytm twierdzenia o osi rozdzielającej do pracy (do wykrywania kolizji) i muszę znaleźć minimalny wektor prostopadły między punktem a linią. Nie pytam o minimalną prostopadłą odległość (którą znam jak znaleźć), ale raczej wektor, który miałby taką samą wielkość jak ta odległość i która pochodzi z dowolnego punktu i punktu na linii. Znam położenie punktu, punkt na linii i wektor jednostkowy określający kierunek linii.Minimalny wektor prostopadły między punktem a linią

To, co próbowałem, to najpierw znaleźć minimalną odległość między punktem a linią.

Kolejna część jest myląca, ale ja: 1) Znaleziono wektor między punktem a punktem na linii Wiem 2) Znaleziono wektor między punktem na linii a punktem na linii plus jednostką wektor podając kierunek linii 3) Wziął krzyż iloczyn tych dwóch wektorów (nazwałbym ten krzyż produkt A) 4) Wziął krzyż produkt wektora jednostki, podając kierunek linii i wektor z krzyża produkt A (nazwałbym ten produkt krzyżowy B) 5) Znormalizowany produkt krzyżowy B 6) Przeskalowany produkt krzyżowy B w minimalnej odległości

W każdym razie cały ten atrybut empt nie zdało egzaminu. Czy ktoś może mi powiedzieć, jak mam znaleźć ten wektor?

+0

piszesz program to zrobić lub po prostu staramy się robić swoje Physics/Calc pracę domową? –

+2

Jest to gra, którą piszę dla zabawy, tak jak powiedziałem, że jest przeznaczona do wykrywania kolizji. – user421215

Odpowiedz

24

Gdybym zrozumiał swoje pytanie poprawnie, wierzę, to jest to, czego szukasz:

P - point 
D - direction of line (unit length) 
A - point in line 

X - base of the perpendicular line 

    P 
    /| 
/| 
/v 
A---X----->D 

(P-A).D == |X-A| 

X == A + ((P-A).D)D 
Desired perpendicular: X-P 

gdy okres reprezentuje iloczyn skalarny i | x-A | oznacza magnitudo.

+0

Tylko wyjaśnić. oznacza produkt z kropką, prawda? – user421215

+0

Dobrze. To właśnie miałem na myśli przez "okres" :) – Pablo

+0

Przepraszam za to tęsknię. W każdym razie wydaje się, że chce działać, ale z jakiegoś powodu mój algorytm SAT jest trochę wyłączony. Rzeczy zderzają się, kiedy nie powinny. Myślę, że to, co mi dałeś, prawdopodobnie działa, odkąd zderzenia wydają się teraz "bardziej poprawne" i mam różne rodzaje markerów, które wydają się teraz bardziej celowe. Dziękuję bardzo, ale niestety wygląda na to, że popełniłem jakiś inny błąd w kodzie. – user421215

2

enter image description here

Z powyższego rysunku, trzeba:

q = p + s --> s = q - p = q - (p2-p1) = q + p1 - p2 

==> s^ = |q - p2 - p1|/|s| (unitary vector) 

Also: |s| = |q| sin c = |q|sin(b-a) 

b = arcsin (qy/|q|); a = arcsin(p1y/|p1|) 

where: |q| = (qx^2 + qy^2)^1/2 
Powiązane problemy