获得一个点与另一个点之间的角度(三角函数)

时间:2013-01-30 14:09:55

标签: java trigonometry

我有2分。基点和其他点。我需要获得基准应移动的角度以使其他点与之相反。但可能性从0到360度不仅仅是90度。 enter image description here

我现在应该用三角法做,但我不知道怎么做。有人可以解释一下我应该使用哪些算法?还是粘贴溶液?谢谢

3 个答案:

答案 0 :(得分:2)

这确实是一个三角测量问题,但听起来你基本上想要红色和黑色点之间的角度,然后只需向该角度添加180°。

然而: Math.atan2(y,x)

可以在这里帮助你,因为你可以给它x坐标的差异和y坐标的差异,以获得一个角度(以弧度表示)。

你真的应该查看trig,因为你可以在10分钟左右的时间里学习基本的东西。 " SOH CAH TOA"对你的一生都有用。

答案 1 :(得分:2)

使用这些点绘制直角三角形并查看角度。如果你知道点的坐标,你就能找到角度,因为知道了tringles的一面。

整体应该是这样的:

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

其中

  

xb,yb是基点的坐标

     

xp,yp是红点的坐标

alpha将以弧度为单位,而不是度数。

并注意atan会将值从-pi/2返回到pi/2

答案 2 :(得分:-1)

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

如果您不了解向量并了解Java,请阅读:

您需要以下信息:

  1. Base-Point的坐标。(表示为点对象basePoint,有x和y)
  2. Other-Point的坐标。(otherPoint)
  3. Base-Point最初指向的位置的坐标。(initialPoint)
  4. (向量有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;
    }
    

    在图中,如果你想要单位矢量(a),可以执行unitVector(vector(a))

    dotProduct(vector a, vector b)
    {
        double val;
        val = a.x*b.x + a.y*b.y;
        return val;
    }
    

    在图中,如果你想要单位向量(a).unit-vector(b),请做dotProduct(unit-vector(a),unit-vector(b))