查看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);
上面的方法很好,这是我的结果的示例:
我遇到的问题是,角度是从x轴开始测量的,并且逆时针方向增大,如下所示:
当底线或顶线“交叉” 0°(平行于x轴)时,我将得到一个错误的角度。
这是展示此问题的另一张图片:
蓝线之间的角度是90°,但我却是450°。发生这种情况是因为我使用了360 - bottomLine + topLine
。
有人可以建议解决此问题的方法吗?
谢谢。
答案 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;
}