2014-09-24 1 views
5

나는 몇 몇 삼각법을 포함하고 현재 붙어있는 지난 몇 주 동안 응용 프로그램을 작성 중입니다. 아래 그림에서 볼 수 있듯이, 나는 중심점 (X1, Y1이라고 부르 자)을 알고있는 순환 아이템 (# 1 위치의 녹색 원)을 가지고있다. 원에는 다른 중심점 (주황색 원)이 있으며 두 개의 다른 표시 (파란색 원) 사이의 중간에 조금 벗어납니다. 이 표시는 이동할 수 있습니다. 주황색 점의 좌표가 계산되고 (X2, Y2라고 함) 원의 수평선을 기준으로 파란색 선의 각도가 계산됩니다 (각도라고 함).회전 각도에 따라 새로운 포인트 오프셋을 계산 하시겠습니까?

위한 deltaX = X2-X1

deltaY에 = Y2-Y1

I가 필요 I는 원의 중심으로 포인트 사이의 차이를 계산할 수

Diagram

시작 위치 (위치 1)에서 위치 2까지 녹색 원 (CW 또는 CCW 중 더 짧은 쪽)을 이동하고 회전하십시오. 이것은 각도가 음수 또는 양수가 될 수 있음을 의미합니다. 파란색 선은 수직으로 끝나야하고 오렌지색 점은 위치 2의 중앙에 있어야합니다 (빨간색 정사각형). 위치 2의 중심에 대한 좌표를 알고 있습니다 (이 점을 X3, Y3이라고 부릅시다). 위치 # 1과 위치 # 2는 서로 정확히 90도입니다.

가 나는 등, 한 점의 회전을 계산 일부 삼각 정체성 수식을 사용할 수 있습니다 생각 :

offsetX =위한 deltaX * COS (90 각) - deltaY에 * 죄 (90 각도)

offsetY = deltaX * sin (90- 각도) + deltaY * cos (90- 각도)

이 오프셋이 원을 조정할 필요가있을 것으로 기대 했었습니다. 2.

X3 = X3 + offsetX

Y3 = Y3 + offsetY 나는이 수학을 사용하려고 할 때, 그것은 광장의 중앙에 원의 오렌지 마크를 배치 아니에요 그러나

. 회전 각도 (양수 또는 음수, CW 또는 CCW) 또는 올바른 각도 (90도에서 알려진 각도 빼기)를 사용하는 경우 내 방정식 및 계산이 올바른지 확실하지 않습니다. 최종 점/위치를 올바르게 계산하려면 어떻게합니까? 모든 도움과 예제가 크게 감사하겠습니다!

감사합니다.

답변

0

그래서 원을 90 - Angle만큼 회전시킨 다음 주황색 점을 (X3, Y3)으로 이동해야합니까?
먼저 당신은 오렌지 포인트가 회전 한 후 좌표 찾을 필요가 :

newX = X2 * cos(90 - Angle) - Y2 * sin(90 - Angle); 
newY = X2 * sin(90 - Angle) + Y2 * cos(90 - Angle); 

newXnewY 포인트 회전 후 좌표 오렌지입니다. 이동 변환은 단순히 빼기 확인하는 방법은 다음과 같습니다

moveX = X3 - newX; 
moveY = Y3 - newY; 

을 이제 90 - Angle으로 원을 회전 (X3, Y3)로 이동합니다 (moveX, moveY) 오렌지 포인트로 이동합니다. 즉, (0, 0) 점을 중심으로 원을 회전하면됩니다. 일부 (X, Y) 점을 중심으로 회전하면 먼저 X2에서 X를 빼고 Y2에서 Y를 빼고 X를 newX에, Y를 newY에 추가해야합니다.이 뺄셈은 회전 시작점을 (0, 0)으로 '이동'하므로 회전 후 다시 이동해야합니다.

newX = (X2 - X) * cos(90 - Angle) - (Y2 - Y) * sin(90 - Angle) + X; 
newY = (X2 - X) * sin(90 - Angle) + (Y2 - Y) * cos(90 - Angle) + Y; 
+0

감사합니다. 나는 이것을 시도 할 것이다. 나는 원을 위치 1에서 위치 2로 옮긴 다음 거기에서 회전을 수행한다는 것을 분명히해야한다고 생각합니다. 그래서 저는 그 주황색 점 (X2, Y2)을 붉은 색 사각형의 중앙에 놓아야합니다 (X3, Y3 점). 각도는 파란색 원을 기준으로 계산되며 때로는 음수 일 수 있습니다 (-1 ~ -180 사이). 이것이 수식에 영향을 미치는지 확실하지 않은가요? – DataCrypt

+0

@DataCrypt 회전 시작점이 주황색 점으로 이동 한 다음 계산 목적으로 먼저 이동하거나 회전하는 것이 중요하지 않습니다. 그러나 오렌지 포인트를 (X3, Y3)으로 이동하면 답이 잘못 될 것입니다. 아마도 오렌지 포인트 주변을 중심으로하지 않고 중심을 중심으로 회전 할 것이기 때문입니다 (회전 한 지점, 회전 후 좌표가 변경되지 않음). 물론 (X3, Y3)이 원과 함께 회전하지 않는 경우에만 가능합니다. – Atomosk

+0

@DataCrypt'sin'과'cos'와 그 수식은 -9000이라면 괜찮습니다. 나를 혼동하는 것은'90 - Angle'입니다. 왜냐하면 제가 보았던 모든 sin과 cos 구현은 각도가 아닌 각도의 라디안 값을 취하기 때문입니다. 하지만 당신이 그걸 알고 있다고 확신합니다. – Atomosk

관련 문제