在查看这个问题提供的答案后,我创建了以下方法:
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
。
请问有人能提供解决此问题的方案吗?
谢谢。
(360 - topLine + bottomLine) % 360
或类似的东西。 - pskink(x1,y1)
和(x2,y2)
的直线与 x 轴之间的角度。我猜这不是你想要做的。 - Andy Turner%
is a modulo operator, not divide, for example36 % 10 == 6
, and not3.6
- pskink