Załóżmy, że mam odcinek od (x1, y1) do (x2, y2). Jak obliczyć wektor normalny prostopadły do prostej?
Mogę znaleźć wiele informacji na temat robienia tego dla samolotów w 3D, ale żadnych rzeczy 2D.
Proszę, nie przejmuj się matematyką (linki do sprawdzonych przykładów, diagramów lub algorytmów są mile widziane), bardziej jestem programistą niż matematykiem;)
Odpowiedzi:
jeśli zdefiniujemy dx = x2-x1 i dy = y2-y1, to normalne to (-dy, dx) i (dy, -dx).
Pamiętaj, że dzielenie nie jest wymagane, więc nie ryzykujesz dzielenia przez zero.
źródło
(x', y') = (-y, x)
i(x', y') = (y, -x)
wydaje się mieć rację, ale po co miałoby się używaćdx
idy
tutaj. Co więcej, w oparciu o nachylenia,m1 * m2 = -1
dla prostych kątów, stąddy' = dx' * (-dx/dy)
idx' = dy' * (-dy/dx)
jak przychodzi do twojego równanianormal.x = x' = -dy
?Innym sposobem myślenia o tym jest obliczenie wektora jednostkowego dla danego kierunku, a następnie zastosowanie obrotu o 90 stopni w kierunku przeciwnym do ruchu wskazówek zegara, aby uzyskać wektor normalny.
Macierzowa reprezentacja ogólnej transformacji 2D wygląda następująco:
gdzie (x, y) to składniki oryginalnego wektora, a (x ', y') to przekształcone składniki.
Jeśli t = 90 stopni, to cos (90) = 0 i sin (90) = 1. Podstawienie i pomnożenie daje:
Ten sam wynik, co podany wcześniej, ale z nieco dokładniejszym wyjaśnieniem, skąd pochodzi.
źródło
To pytanie zostało opublikowane dawno temu, ale znalazłem alternatywny sposób, aby na nie odpowiedzieć. Postanowiłem więc udostępnić to tutaj.
Po pierwsze, trzeba wiedzieć, że: jeśli dwa wektory są prostopadłe, ich iloczyn skalarny jest równy zero.
Wektor normalny
(x',y')
jest prostopadły do linii łączącej(x1,y1)
i(x2,y2)
. Ta linia ma kierunek(x2-x1,y2-y1)
lub(dx,dy)
.Więc,
Istnieje wiele par (x ', y'), które spełniają powyższe równanie. Ale najlepsza para, która ZAWSZE satysfakcjonuje, to albo
(dy,-dx)
albo(-dy,dx)
źródło
jeśli prostopadłe dwie linie:
następnie
b jest czymś, co chcesz przekazać z określonego przez siebie punktu
źródło