gpt4 book ai didi

java - 计算两条线之间的角度而不必计算斜率? ( java )

转载 作者:IT老高 更新时间:2023-10-28 20:56:27 27 4
gpt4 key购买 nike

我有两条线路:L1 和 L2。我想计算两条线之间的角度。 L1 有点:{(x1, y1), (x2, y2)},L2 有点:{(x3, y3), (x4, y4)}

如何计算这两条线之间形成的角度,而无需计算斜率?我目前遇到的问题是,有时我有水平线(沿 x 轴的线)并且以下公式失败(除以零异常):

arctan((m1 - m2) / (1 - (m1 * m2)))

其中 m1m2 分别是第 1 行和第 2 行的斜率。是否有一个公式/算法可以计算两条线之间的角度而不会出现被零除的异常?任何帮助将不胜感激。

这是我的代码片段:

// Calculates the angle formed between two lines
public static double angleBetween2Lines(Line2D line1, Line2D line2)
{
double slope1 = line1.getY1() - line1.getY2() / line1.getX1() - line1.getX2();
double slope2 = line2.getY1() - line2.getY2() / line2.getX1() - line2.getX2();
double angle = Math.atan((slope1 - slope2) / (1 - (slope1 * slope2)));
return angle;
}

谢谢。

最佳答案

atan2 函数减轻了处理 atan 的痛苦。

声明为double atan2(double y, double x),将直角坐标(x,y)转换为角度theta从极坐标 (r,theta)

所以我会把你的代码重写为

public static double angleBetween2Lines(Line2D line1, Line2D line2)
{
double angle1 = Math.atan2(line1.getY1() - line1.getY2(),
line1.getX1() - line1.getX2());
double angle2 = Math.atan2(line2.getY1() - line2.getY2(),
line2.getX1() - line2.getX2());
return angle1-angle2;
}

关于java - 计算两条线之间的角度而不必计算斜率? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com