.net 如何计算两条直线相交处的夹角

2fjabf4q  于 2023-06-07  发布在  .NET
关注(0)|答案(3)|浏览(186)

我想知道如何计算两条直线在交点处的Angular 。
请看下图。这里红线与绿色线相交,我怎么计算这个Angular ?

vwhgwdsa

vwhgwdsa1#

计算两条直线的方向向量并将其归一化:

d := (x2 - x1, y2 - y2)
length = sqrt(d.x^2 + d.y^2)
d := (d.x / length, d.y / length)

然后,您有多个选项来计算Angular 。一个简单的方法是使用点积:

dot = dRed.x * dGreen.x + dRed.y * dGreen.y
angle = arc cos(dot)

如果您还想重建大于180°的Angular (您需要正确的线方向),则需要叉积:

cross = dRed.x * dGreen.y - dRed.y * dGreen.x
angle = atan2(cross, dot)
jk9hmnmh

jk9hmnmh2#

对于功能:

  • f(x)= fa * x + fb
  • g(x)= ga * x + gb

交叉角(弧度)为:
PI - [
arctan(ga)+(PI - arctan(fa))
]
或者如果你有一个交点 P
Arctan(|f(0)- Py|/ Px)+
Arctan(|g(0)- Py|/ Px)
或者如果你另外有函数的零点(D1和D2)(因此f(D1)= 0和g(D2)= 0):
Arctan(|D1 - Px|/ Py)+
Arctan(|D2 - Px|/ Py)

它是如何工作的?

  • 对于函数f(x) = ax + ba是直线和X轴之间的Angular 的正切
  • 为了得到这个Angular ,我们使用 arctan(a)
  • 我们对其他函数做同样的操作
  • 我们有两个角,分别命名为AB
  • 沿X轴的两条线呈现三角形(ABC
  • Angular AB 等于A
  • CB 等于 PI -B(线的“另一边”的角,因为B超出三角形,我们需要三角形内的对应角)
  • 三角形Angular 之和等于 180°,或弧度 PI
  • Angular AC = 180° -(AB + CB)
  • 因此,我们得到三角形的第三个角,但由于相交角超出三角形,我们从 180°(半个圆)中减去这个角

将其转换为度:
度=(180/PI)* 弧度

8ehkhllq

8ehkhllq3#

你可以计算两条直线的交点(如果你知道两条直线的方程式)。利用这个交点,你可以在其中一条直线上找到另一点,并得到其中一条直线在另一条直线上的投影。这个投影会给予你两条直线之间的夹角。
另外,如果你知道其中一条直线和另一条直线上的点的方程,你仍然可以用这个方法求出两条直线之间的夹角。

相关问题