2016-08-01 4 views
-2

저는 우선 파이썬으로 스크립트를 작성합니다. 이 예제를 단순하게 만들려면 uv 좌표가 ([0,0], [1,1]) 인 한 모서리가 있어야 45도 각도가됩니다. 나는 ([0,0], [0,1]) 다른 모서리를 가지므로 그 각도는 0/360도입니다. 내 목표는 차이를 얻기 위해 두 가장자리의 각도를 비교하여 첫 번째 가장자리의 각도와 일치하도록 두 번째 가장자리의 각도를 수정할 수 있습니다. 벡터 수학을 통해이를 수행 할 수있는 방법이 있습니까?가장자리 사이의 일치 각도

+0

질문이 명확하지 않습니다. 두 튜플 (모서리)의 첫 번째 목록 (점)이 동일하다고 확신합니까? 이 두 벡터 사이의 각도를 계산하길 원하십니까? 둘 다 그렇다면 코사인 법칙이나 내적 (기본적으로 같은)을 사용하십시오. atan2() 함수를 사용할 수도 있지만 더 복잡합니다. –

+0

포인트는 XYZ 좌표가 아닌 UV 좌표이며 가장자리는 이러한 좌표 쌍입니다. – Kenny

+0

3 점 사이의 벡터를 비교하여 점이 같은지 알아보기위한 점 제품의 코드 예제가 있는데, 각도 차이를 얻는 방법을 잘 모르겠습니다. – Kenny

답변

0

가장 쉽게 재구성하고 따라서 구조적으로 기억하는 것은 IMO 복잡한 그림입니다. a=a.x+i*a.y에서 b=b.x+i*b.y 사이의 각도를 계산하려면 a의 공액을 곱하여 b을 다시 회전하여 제로 각에서 각도를 얻습니다. 양의 실수 축이

arg((a.x-i*a.y)*(b.x+i*b.y)) 

=arg((a.x*b.x+a.y*b.y)+i*(a.x*b.y-a.y*b.x)) 

=atan2(a.x*b.y-a.y*b.x , a.x*b.x+a.y*b.y) 

참고 화면 따라서 일반적인 방향의 각도를 얻기 위하여 atan2(y,x)에서 atan2(-y,x)에 서명 스위치를 사용하여 변경 데카르트/복소 평면에 대향하는 방향을 사용하여 조정한다.


당신은 b의 지정된 길이를 얻기 위해 재조정해야합니다

b.x = cos(w)*a.x - sin(w)*a.y 
b.y = cos(w)*a.y + sin(w)*a.x 

를 얻기 위해 cos(w)+i*sin(w) 곱, a에서 w을 (라디안) 벡터 b 회전 각도를 생산합니다.

+0

나는 LutzL ...을 따르고 있는지 확신하지 못합니다 ... are are a 및 b, 45 및 0 각각? – Kenny

+0

아니요. 질문의 숫자를 사용하면 'a = (a.x, a.y) = (1,1)'및'b = (1,0) '일 수 있습니다. 일반적으로 이러한 벡터는 회전 중심과의 차이입니다.이 값은 (아마도)'(0,0)'입니다. – LutzL