在数学坐标中找到一条线所形成的角度?

时间:2014-02-13 13:55:43

标签: java graphics

我在数学坐标中有两个点(x1,y1)和(x2,y2)(左下角是原点)。我有一个比例因子SCALE来将这些坐标缩放到我的屏幕坐标,然后补充高度以获得原始屏幕坐标(左上角是原点)。我想知道屏幕坐标系中2点的角度。目前我正在做以下事情:

theta=Math.atan((y2-y1)/(x2-x1));
if(theta<0)
theta+=Math.PI;

但它不起作用。我可以不缩放坐标吗?

编辑:示例输出 x1 = 7.2 y1 = 9.575 x2 = 5.4 y2 = 7.15

是53.414度。

2 个答案:

答案 0 :(得分:1)

这个等式适合你。

    float angle = (float) Math.toDegrees(Math.atan2(y_2 - y_1, x_2 - x_1));

    //Take this out if you want negative values.
    if(angle < 0){
        angle += 360;
    }

这将返回介于0和359之间的值。如果您想要负值,只需取出if语句。

你说它不起作用。你的意思是告诉我,我的眼睛在骗我吗? enter image description here

根据您的上述评论,您期望233.41467。你应该留在angle += 360

答案 1 :(得分:0)

我认为计算R ^ 2的两个向量之间角度的标准公式如下:(假设alpha是两个向量之间的角度,v1和v2是两个向量)

cos(alpha) = abs(dot(v1, v2)) / (norm(v1) * norm(v2))

因此,在将两个向量v1 =(x1,y1)^ t和v2 =(x2,y2)^ t缩放到屏幕坐标后,您应该使用上面的公式来计算alpha。 (dot表示v1和v2之间的点积,norm是标准的欧几里德度量。)

之后你获得弧度的角度(对于转换为度数,你可以简单地除以2 * Pi并乘以360)。