我有角度,线的长度和给定的起点,我想计算目标点来移动我的物体。我正在关注这篇文章和其他一些文章:
cocos2d calculate destination point given start point, angle and distance
问题:对于第一和第四象限,它给了我正确的角度。但对于第二和第三象限,它的方向正好相反。我无法弄清楚问题。这张图片可以说清楚:
绿色箭头显示我想要的方向,红色箭头显示它实际到达的位置。
到目前为止我的代码:
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;
答案 0 :(得分:2)
请注意,在每个失败案例中,红色和绿色向量具有相同的m
,因此代码无法猜出您的意思。
您可以编写更多代码来检测象限,并相应地加或减π。或者只使用atan2
。
答案 1 :(得分: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);
}
}
}
}
}