2

我有2分。基点和其他点。我需要得到一个角度,基地应该移动到与它相对的另一个点。但可能性是从 0 到 360 度,而不仅仅是 90 度。 在此处输入图像描述

我现在应该用三角学来完成,但我不知道怎么做。有人能解释一下我应该使用什么算法吗?还是粘贴解决方案?谢谢

4

3 回答 3

3

使用这些点绘制一个直角三角形并查看角度。如果您知道点的坐标,您将能够找到角度,因为知道三角形的一边。

总的来说应该是这样的:

double alpha = Math.atan((yb - yp) / (xb - xp));

在哪里

xb, yb 是基点坐标

xp, yp 是红点的坐标

alpha将以弧度表示,而不是度数。

并注意atan返回值 from -pi/2topi/2

于 2013-01-30T14:27:39.747 回答
2

这确实是一个三角问题,但听起来你基本上想要红点和黑点之间的角度,然后在这个角度上加上 180。

但是: Math.atan2(y, x)

可以在这里为您提供帮助,因为您可以给它 x 坐标的差异和 y 坐标的差异以获得角度(以弧度为单位)。

不过你真的应该查一下 trig,因为你可以在 10 分钟左右学会基本的东西。“SOH CAH TOA”对你的一生都有用。

于 2013-01-30T14:27:08.287 回答
-1

可以通过以下方式获得角度: angle = Math.acos(unit-vector(a).unit-vector(b)) 其中 a 和 b 是基点和初始方向之间的向量,基点和其他点分别('.' 代表点积)如果你想要以度为单位的角度,请执行以下操作:angle = (angle*180/Math.PI)。

如果您不了解向量并且了解 Java,请阅读以下内容:

您将需要以下信息:

  1. Base-Point 的坐标。(表示为点对象 basePoint,具有 x 和 y)
  2. 其他点的坐标。(otherPoint)
  3. Base-Point 最初指向的坐标。(initialPoint)

(向量有 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))

于 2013-01-30T15:21:51.063 回答