程序计算线段夹角怎么算

时间:2025-01-29 16:46:43 单机游戏

计算线段夹角的方法有多种,以下是几种常见的方法:

方法一:通过斜率计算夹角

计算斜率

设两条线段的端点分别为 \(A(x_1, y_1)\), \(B(x_2, y_2)\) 和 \(C(x_3, y_3)\)。

线段 \(AB\) 的斜率 \(m_1 = \frac{y_2 - y_1}{x_2 - x_1}\)。

线段 \(AC\) 的斜率 \(m_2 = \frac{y_3 - y_1}{x_3 - x_1}\)。

计算夹角

利用反正切函数计算夹角 \(θ\)(弧度):

\[ θ = \arctan\left(\frac{m_2 - m_1}{1 + m_1 \cdot m_2}\right) \]

将弧度转换为度:

\[ θ_{\text{度}} = θ \times \frac{180}{\pi} \]

方法二:使用向量计算夹角

计算方向向量

线段 \(AB\) 的方向向量 \(\vec{d_1} = (x_2 - x_1, y_2 - y_1)\)。

线段 \(AC\) 的方向向量 \(\vec{d_2} = (x_3 - x_1, y_3 - y_1)\)。

计算向量的点积和模长

点积:

\[ \vec{d_1} \cdot \vec{d_2} = (x_2 - x_1)(x_3 - x_1) + (y_2 - y_1)(y_3 - y_1) \]

模长:

\[ \|\vec{d_1}\| = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \]

\[ \|\vec{d_2}\| = \sqrt{(x_3 - x_1)^2 + (y_3 - y_1)^2} \]

计算夹角

利用点积公式和模长计算夹角 \(θ\)(弧度):

\[ θ = \arccos\left(\frac{\vec{d_1} \cdot \vec{d_2}}{\|\vec{d_1}\| \cdot \|\vec{d_2}\|}\right) \]

将弧度转换为度:

\[ θ_{\text{度}} = θ \times \frac{180}{\pi} \]

示例代码

方法一:通过斜率计算夹角

```python

import math

def calculate_angle(x1, y1, x2, y2, x3, y3):

计算斜率

m1 = (y2 - y1) / (x2 - x1)

m2 = (y3 - y1) / (x3 - x1)

计算夹角(弧度)

angle_rad = math.atan((m2 - m1) / (1 + m1 * m2))

将弧度转换为角度

angle_deg = math.degrees(angle_rad)

return angle_deg

示例线段

x1, y1 = 0, 0

x2, y2 = 1, 1

x3, y3 = 0, -1

计算夹角

angle = calculate_angle(x1, y1, x2, y2, x3, y3)

print(f"夹角为: {angle}度")

```

方法二:使用向量计算夹角