为了账号安全,请及时绑定邮箱和手机立即绑定

计算两条线之间的角度

计算两条线之间的角度

qq_花开花谢_0 2022-06-23 09:13:53
查看此问题中提供的答案后,我创建了以下方法: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);

}


查看完整回答
反对 回复 2022-06-23
?
料青山看我应如是

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;

}


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 479 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号