计算两条线之间的角度

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


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);



以上工作正常,这是我的结果示例:

http://img4.mukewang.com/62b3be64000132a302990296.jpg

我遇到的问题是角度是从x轴测量并逆时针增加,如下所示:

http://img4.mukewang.com/62b3be720001bdb702960300.jpg

当底线或顶线“穿过” 0°(平行于 x 轴)时,我会得到一个不正确的角度。

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

http://img3.mukewang.com/62b3be7e0001885002980292.jpg

蓝线之间的角度是 90°,但我得到的是 450°。这是因为我使用的计算360 - bottomLine + topLine

有人可以建议这个问题的解决方案。

谢谢你。



qq_花开花谢_0
浏览 480回答 2
2回答

拉莫斯之舞

你可以这样使用,输出值是弧度 坐标点 (0,0) 其他点 (x1,y1) ,(x2,y2)atan()= 所以逆private double angleOfRadian(float x1, float x2, float y1, float y2) {&nbsp; &nbsp; &nbsp;return java.lang.Math.atan(y2/x2)-java.lang.Math.atan(y1/x1);}

料青山看我应如是

使用此方法正确计算:private double angleOfDegrees(float x0, float y0, float x1, float y1) {&nbsp; &nbsp; double angle2 = Math.atan2(y1,x1);&nbsp; &nbsp; double angle1 = Math.atan2(y0,x0);&nbsp; &nbsp;return Math.toDegrees(angle2 - angle1) + 360) % 360;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java