查看此问题中提供的答案后,我创建了以下方法: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);以上工作正常,这是我的结果示例:我遇到的问题是角度是从x轴测量并逆时针增加,如下所示:当底线或顶线“穿过” 0°(平行于 x 轴)时,我会得到一个不正确的角度。这是演示此问题的另一张图片:蓝线之间的角度是 90°,但我得到的是 450°。这是因为我使用的计算360 - bottomLine + topLine。有人可以建议这个问题的解决方案。谢谢你。
2 回答

拉莫斯之舞
TA贡献1820条经验 获得超10个赞
你可以这样使用,输出值是弧度 坐标点 (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);
}

料青山看我应如是
TA贡献1772条经验 获得超8个赞
使用此方法正确计算:
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;
}
添加回答
举报
0/150
提交
取消