2011-08-02 10 views
1

개체를 회전시켜 지정된 지점에 맞출 수있는 메서드를 찾으려고 노력하고 있습니다. 그러나 내가 얻는 숫자는별로 의미가 없으며 수학 메서드가 반환하는 것을 이해하지 못한다고 생각합니다. 객체 현재 위치 지정된 점과 getX()와 getY()되어있다회전 각도를 찾으십니까?

public void rotate(double x, double y) { 
    rotateRight(Math.toDegrees(Math.atan2((x - getX()), (y - getY())))); 
} 

x와 y, 그래서 나는이 객체 학위의 수를 찾기 위해 노력하고 있어요 : 여기

내 코드입니다 우회전하여 지정된 지점을 향하게합니다.

누구든지 신뢰할 수있는 방법을 권장 할 수 있습니까?

+0

지금 당장 어떤 방향으로 나아가고 있는지 알아야합니다. 얼마나 돌아야하는지 알고 있어야합니다. 따라서 객체 좌표, 원하는 좌표 및 객체의 현재 방향 등 세 가지가 필요합니다. – Paulpro

+1

"getX() 및 getY()가 객체의 현재 지점 인 경우"객체가 어느 위치인지는 알지만 방향은 알 수 없습니다. –

+0

개체가 어떤 방향으로 향하고 있는지 알았 으면 어떻게 작동합니까? –

답변

1

올바르게 수행하려면 matrix transformation이 필요합니다.

+0

알아내는 동안 잠시 나갔다. 그러나 그것이 내가 필요로했던 단지 것이다. 고마워. –

0

Math.atan2()에 의해 반환 된 각도는 절대 값입니다. 상대 회전으로 바꾸려면 먼저 현재 각도가 무엇인지 알아야합니다. 그런 다음 두 각도를 뺄 필요가 있습니다.

1

당신의 이름은 다소 혼란 스럽습니다. 그래서 여기에서 몇 가지 가정을하고 있습니다. "객체"는 원점 (0,0)에 있고 getX() 및 getY()는 객체가 현재 향하고있는 점을 반환하고 객체를 새 점에 맞 춥니 다.

여기에서 간단한 삼각법 및 산술입니다.

rotation_angle=new_angle - current_angle 
+1

나는 그렇게 확신하지 않는다. "현재 각도"계산에 결함이 있습니다. "this"가 원점을 향하고 있다고 가정하고 있습니다. getX와 getY는 직면 한 곳이 아닌 현재 * 위치 만 알려주므로. 여러분이 계산 한 "현재 각도"는 origina에서 getX까지의 줄입니다. getY는 문제와 무관합니다. – Bohemian

+0

@ 보헤미안 - 제 가정은 질문 문언이 틀리며 getX/getY가 실제로 'this'가 향함의 원점에있는 지점이라는 것입니다. 따라서 질문자가 rotate (x, y)를 호출 한 후에 getX()를 호출하면 해당 rotate 호출에서 x가 반환됩니다. 내가 볼 수있는 한 질문에 완전한 답이있는 유일한 방법입니다. –

1

그것은에 따라 새 각도가

new_angle=atan(newX/newY) 

하고 자연적 통해 회전하는 데 필요한 각도가 될 것

current_angle=atan(getX()/getY()) 

: 우선 현재 각도를 파악하는 것입니다 당신이 사용하는 단위. 개인적으로, 라디안으로, 나는 스 니펫에이 함수를 가지고있다.

public static double getAngleBetween(double x1, double y1, double x2, double y2) 
{ 
     return(Math.atan2(y1-y2, x1-x2)); 
} 

두 개의 추상 점 사이의 각도 (라디안)가 생깁니다.

관련 문제