计算两条线之间的角度

时间:2019-02-15 08:06:36

标签: java android canvas trigonometry

查看this问题中提供的答案后,我创建了以下方法:

private int angleOf(float x1, float x2, float y1, float y2) {
    final double deltaY = (y1 - y2);
    final double deltaX = (x2 - x1);
    final double result = Math.toDegrees(Math.atan2(deltaY, deltaX));
    return (int) ((result < 0) ? (360d + result) : result);
}

使用上述方法,我将获得每条线的角度,然后将文本绘制到画布上,如下所示:

int topLine = angleOf(this.mPoints[5].x, this.mPoints[4].x, this.mPoints[5].y, this.mPoints[4].y);
int bottomLine = angleOf(this.mPoints[5].x, this.mPoints[6].x, this.mPoints[5].y, this.mPoints[6].y);

canvas.drawText(String.valueOf(360 - bottomLine + topLine)+"°", this.mPoints[5].x - 80.0f, this.mPoints[5].y, this.mTextPaint);



上面的方法很好,这是我的结果的示例:

exampleImage1


我遇到的问题是,角度是从x轴开始测量的,并且逆时针方向增大,如下所示:

image2

当底线或顶线“交叉” 0°(平行于x轴)时,我将得到一个错误的角度。

这是展示此问题的另一张图片:

image3

蓝线之间的角度是90°,但我却是450°。发生这种情况是因为我使用了360 - bottomLine + topLine

有人可以建议解决此问题的方法吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以这样使用,输出值为 radian 坐标点(0,0)其他点(x1,y1),(x2,y2)

atan() =棕褐色反转

private double angleOfRadian(float x1, float x2, float y1, float y2) {
     return java.lang.Math.atan(y2/x2)-java.lang.Math.atan(y1/x1);
}

答案 1 :(得分:0)

使用此方法正确计算它:

private double angleOfDegrees(float x0, float y0, float x1, float y1) {
    double angle2 = Math.atan2(y1,x1);
    double angle1 = Math.atan2(y0,x0);

   return Math.toDegrees(angle2 - angle1) + 360) % 360;
}