我有2分。基点和其他点。我需要得到一个角度,基地应该移动到与它相对的另一个点。但可能性是从 0 到 360 度,而不仅仅是 90 度。
我现在应该用三角学来完成,但我不知道怎么做。有人能解释一下我应该使用什么算法吗?还是粘贴解决方案?谢谢
我有2分。基点和其他点。我需要得到一个角度,基地应该移动到与它相对的另一个点。但可能性是从 0 到 360 度,而不仅仅是 90 度。
我现在应该用三角学来完成,但我不知道怎么做。有人能解释一下我应该使用什么算法吗?还是粘贴解决方案?谢谢
使用这些点绘制一个直角三角形并查看角度。如果您知道点的坐标,您将能够找到角度,因为知道三角形的一边。
总的来说应该是这样的:
double alpha = Math.atan((yb - yp) / (xb - xp));
在哪里
xb, yb 是基点坐标
xp, yp 是红点的坐标
alpha
将以弧度表示,而不是度数。
并注意atan
返回值 from -pi/2
topi/2
这确实是一个三角问题,但听起来你基本上想要红点和黑点之间的角度,然后在这个角度上加上 180。
但是: Math.atan2(y, x)
可以在这里为您提供帮助,因为您可以给它 x 坐标的差异和 y 坐标的差异以获得角度(以弧度为单位)。
不过你真的应该查一下 trig,因为你可以在 10 分钟左右学会基本的东西。“SOH CAH TOA”对你的一生都有用。
可以通过以下方式获得角度: angle = Math.acos(unit-vector(a).unit-vector(b)) 其中 a 和 b 是基点和初始方向之间的向量,基点和其他点分别('.' 代表点积)如果你想要以度为单位的角度,请执行以下操作:angle = (angle*180/Math.PI)。
如果您不了解向量并且了解 Java,请阅读以下内容:
您将需要以下信息:
(向量有 2 个分量,x 和 y。用双 x 和 y 为向量声明一个类,或者使用 Point)
newVector(Point p1, Point p2)
{
// returns a new vector from point a
//to point b given two absolute co-ordinates a and b
vector new1 = new vector(0, 0);
new1.x = p2.x - p1.x;
new1.y = p2.y - p1.y;
return new1;
}
在图中,如果你想要vector(a),做newVector(basePoint, initialDirection);
同样,vector(b) = newVector(basePoint, otherPoint)
unitVector(vector a)
{
vector new1 = new vector(0,0);
new.x = a.x/(Math.sqrt(a.x*a.x + a.y*a.y));
new.x = a.y/(Math.sqrt(a.x*a.x + a.y*a.y));
return new1;
}
在图中,如果你想要 unit-vector(a),请执行 unitVector(vector(a))
dotProduct(vector a, vector b)
{
double val;
val = a.x*b.x + a.y*b.y;
return val;
}
在图中,如果你想要 unit-vector(a).unit-vector(b),做 dotProduct(unit-vector(a), unit-vector(b))