[math] 선분의 법선 벡터는 어떻게 계산합니까?

(x1, y1)에서 (x2, y2)로가는 선 세그먼트가 있다고 가정하십시오. 선에 수직 인 법선 벡터는 어떻게 계산합니까?

3D 평면에서이 작업을 수행하는 데 대한 많은 정보를 찾을 수 있지만 2D 항목은 없습니다.

수학 (쉬운 예제, 다이어그램 또는 알고리즘에 대한 링크는 환영합니다)에 쉽게 가십시오. 저는 수학자보다 프로그래머입니다.)



답변

dx = x2-x1 및 dy = y2-y1을 정의하면 법선은 (-dy, dx) 및 (dy, -dx)입니다.

나누기가 필요하지 않으므로 0으로 나눌 위험이 없습니다.


답변

그것을 생각하는 또 다른 방법은 주어진 방향에 대한 단위 벡터를 계산 한 다음 반 시계 방향으로 90도 회전하여 법선 벡터를 얻는 것입니다.

일반적인 2D 변환의 행렬 표현은 다음과 같습니다.

x' = x cos(t) - y sin(t)
y' = x sin(t) + y cos(t)

여기서 (x, y)는 원래 벡터의 구성 요소이고 (x ‘, y’)는 변환 된 구성 요소입니다.

t = 90도이면 cos (90) = 0 및 sin (90) = 1입니다.이를 곱하고 곱하면 다음과 같은 결과가 나타납니다.

x' = -y
y' = +x

이전에 제공된 것과 동일한 결과이지만 그 출처에 대해 조금 더 설명합니다.


답변

이 질문은 오래 전에 게시되었지만 다른 답변 방법을 찾았습니다. 그래서 여기서 공유하기로 결정했습니다.
먼저, 두 벡터가 수직 인 경우 내적은 0과 같습니다.
법선 벡터를 (x',y')연결하는 선에 직교 (x1,y1)하고 (x2,y2). 이 줄은 방향이 (x2-x1,y2-y1), 또는 (dx,dy).
그래서,

(x',y').(dx,dy) = 0
x'.dx + y'.dy = 0

위의 방정식을 만족하는 많은 쌍 (x ‘, y’)입니다. 그러나 항상 만족하는 가장 좋은 쌍은 (dy,-dx)또는(-dy,dx)


답변

m1 = (y2 - y1) / (x2 - x1)

수직 두 줄인 경우 :

m1*m2 = -1

그때

m2 = -1 / m1 //if (m1 == 0, then your line should have an equation like x = b)

y = m2*x + b //b is offset of new perpendicular line..

당신이 정의 한 지점에서 그것을 전달하려는 경우 b는 무언가입니다


답변