Dynamo 利用Python求两条线的角平分线
时间: 2025-03-27 13:34:00 浏览: 30
### 使用 Python 求两条线的角平分线
在几何学中,给定两条相交直线,它们之间的夹角可以有两个角度(锐角和钝角),而这两条线的角平分线则是将这两个角度等分为两个相同的角度。
为了计算两条线的角平分线,我们可以按照以下几个步骤来进行:
#### 步骤 1:表示两直线的方向向量
假设我们有两条直线 \(L_1\) 和 \(L_2\), 它们分别由点 \(P_0(x_0,y_0)\)、方向向量 \(\vec{d}_1=(dx_1,dy_1)\),以及通过同一点或另一已知点 \(Q(x_q,y_q)\) 的第二条线 \(L_2\) 方向向量 \(\vec{d}_2=(dx_2,dy_2)\).
#### 步骤 2:归一化方向向量
为了让之后的操作更简单准确,我们需要对上面提到的方向向量进行单位化处理得到 \(\hat{d}_1,\hat{d}_2\):
\[|\vec{d}| = \sqrt{{dx}^2 + {dy}^2}\]
对于每一个向量都应用上述公式,并除以其长度获得其对应的单位向量。
#### 步骤 3:求取法向量并加减组合
接下来,我们将每个单位向量与其自身的负数版本相结合 (\(±\hat{d}_i\)) 来创建新的向量作为候选解。这里会有四种情况,但是实际上只有当选择的是内侧相对位置上的时候才是正确的答案。即:
\[bisector_{in}=\frac{\hat{d}_1+\hat{d}_2}{| \hat{d}_1+ \hat{d}_2 |}\]
\[bisector_{out}=\frac{-\hat{d}_1-\hat{d}_2}{| -\hat{d}_1- \hat{d}_2 |}\]
其中 `in` 表示内部角平分线也就是我们要找的那个;`out` 则代表外部的情况,在很多应用场景里并不需要考虑它。
下面是具体的 python 实现代码段:
```python
import numpy as np
def normalize(v):
norm=np.linalg.norm(v)
if norm==0:
return v
return v/norm
# 假设输入为起点p0 [x0,y0], d1=[dx1, dy1] , d2 =[dx2, dy2]
def find_angle_bisectors(p0,d1,d2):
# 归一向量化
u_d1=normalize(d1)
u_d2=normalize(d2)
bisector_in =(u_d1 + u_d2)/np.linalg.norm(u_d1 + u_d2 )
bisector_out=(-u_d1-u_d2)/np.linalg.norm(-u_d1-u_d2 )
print("internal angle bisector (normalized direction vector): ",bisector_in)
print("external angle bisector (normalized direction vector): ",bisector_out)
find_angle_bisectors([0,0],[4,-5],[-6,8]) # 可替换实际值测试其他例子.
```
该函数接收三个参数 p0(起始公共点)、d1 和 d2 分别对应于两条射线的方向矢量,最后打印出所找到的内外部角平分线(均为标准化后的方向矢量)。你可以根据实际情况调整这些参数以适应具体需求。
阅读全文
相关推荐

















