(x1, y1)에서 (x2, y2)로가는 선 세그먼트가 있다고 가정하십시오. 선에 수직 인 법선 벡터는 어떻게 계산합니까?
3D 평면에서이 작업을 수행하는 데 대한 많은 정보를 찾을 수 있지만 2D 항목은 없습니다.
수학 (쉬운 예제, 다이어그램 또는 알고리즘에 대한 링크는 환영합니다)에 쉽게 가십시오. 저는 수학자보다 프로그래머입니다.)
(x1, y1)에서 (x2, y2)로가는 선 세그먼트가 있다고 가정하십시오. 선에 수직 인 법선 벡터는 어떻게 계산합니까?
3D 평면에서이 작업을 수행하는 데 대한 많은 정보를 찾을 수 있지만 2D 항목은 없습니다.
수학 (쉬운 예제, 다이어그램 또는 알고리즘에 대한 링크는 환영합니다)에 쉽게 가십시오. 저는 수학자보다 프로그래머입니다.)
답변:
dx = x2-x1 및 dy = y2-y1을 정의하면 법선은 (-dy, dx) 및 (dy, -dx)입니다.
나누기가 필요하지 않으므로 0으로 나눌 위험이 없습니다.
(x', y') = (-y, x)
그리고 (x', y') = (y, -x)
바로 것 같다,하지만 왜 하나 사용하는 것이 dx
및 dy
여기. 또한, 경사에 기초하여 m1 * m2 = -1
직각 라인에 대해, dy' = dx' * (-dx/dy)
그리고 dx' = dy' * (-dy/dx)
방정식에서 어떻게 오는가 normal.x = x' = -dy
?
그것을 생각하는 또 다른 방법은 주어진 방향에 대한 단위 벡터를 계산 한 다음 반 시계 방향으로 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
이전에 제공된 것과 동일한 결과이지만 그 출처에 대해 조금 더 설명합니다.