2016-06-25 8 views
2

각도, 길이 및 시작점이 있으며 여기에서 객체를 이동하기 위해 목표 지점을 계산하고 싶습니다. 이 게시물과 일부 다른 사람을 다음 해요 :주어진 시작점, 각도 및 길이에 따라 목표점을 계산합니다. 반대 방향으로 이동합니다.

cocos2d calculate destination point given start point, angle and distance

문제 : 1과 4 사분면를 들어, 나에게 정확한 각도를주고 있어요. 그러나 제 2 사분면과 제 3 사분면에 대해서는 정확히 반대 방향입니다. 나는 문제를 파악할 수 없었다. 이 이미지는 분명히 할 수

enter image description here

녹색 화살표가 내 의도 한 방향을 표시하고 실제로 어디로 빨간색 화살표가 표시됩니다. 지금까지

내 코드 : 각 고장의 경우, 빨간색과 녹색 벡터가 같은 m을 가지고

float m = (targetPosition.y - initialPosition.y)/(targetPosition.x - initialPosition.x); 
    angle = atan (m) * 180/PI; 
    int lineLength = 200; 
    float radiansAngle = CC_DEGREES_TO_RADIANS(angle); 

    Vec2 endPoint; 
    endPoint.y = sinf(radiansAngle) * lineLength + initialPosition.y; 
    endPoint.x = cosf(radiansAngle) * lineLength + initialPosition.x; 

답변

2

공지 사항, 그래서 코드가 하나 당신이을 의미 추측 할 수 있습니다.

사분면을 탐지하고 그에 따라 π을 더하거나 뺄 수있는 코드를 더 작성할 수 있습니다. 또는 atan2을 사용하십시오.

+0

ata2도 작동하지 않습니다.이 float xDiff = targetPosition.x - initialPosition.x; float yDiff = targetPosition.y - targetPosition.y; return atan2 (yDiff, xDiff) * 180/PI; – Itkrux

+0

@ Nargis'atan2'가 작동합니다. 자신의 실수를 확인하고 'atan2'가 귀하의 언어로 어떤 범위를 반환하는지 고려하십시오 (0..2Pi 또는 -Pi..Pi). – MBo

1

문제는 tan 기능의 주기성에 있다고 생각합니다. 어느 사분면인지 계산해야합니다.

나는 비슷한 것을 제작했지만 openscad에서는 조금 다른 것을 만들었습니다. 필요에 맞게 조정할 수 있습니다. 나는 관련 선을 강조했다. 나는 asin을 사용하지만 비슷한 원칙이 적용됩니다.

module ql (x1,y1,x2,y2,w,thickness=2){ 
    length=sqrt(pow((x1-x2),2)+pow((y1-y2),2)); 
    //Next line corrects the angle for quadrant 
    ang=((x2-x1)<0)?180-asin((y2-y1)/length):asin((y2-y1)/length); 
    translate([x1,y1,0]){ 
    rotate([0,0,ang]){ 
     translate([0,-w/2,0]){ 
     scale([length,w,thickness]){ 
      cube(1); 
     } 
     } 
    } 
    } 
}