Skip to main content
 首页 » 编程设计

python之查找与已知平面正交的平面

2025年05月04日19lori

我希望在这里得到一些帮助。我是一名地质学家,所以我的数学背景没有达到应有的水平。我有一个已在 CAD 程序中数字化的地质断层。我在故障平面上放置了三个代表点并提取了这些坐标点。我使用以下代码找到了该平面的单位向量:

p1 = np.array([503562, 2811504, 1771], dtype='float64') 
p2 = np.array([504122, 2810766, 1820], dtype='float64') 
p3 = np.array([504325, 2811311, 1042], dtype='float64') 
 
#  Calculate vectors 
v1 = p3 - p1 
v2 = p2 - p1 
 
#  Find the cross product (vector normal to the plane) 
cp = np.cross(v1, v2) 
 
#  Assign to a, b and c for components of plane equation 
a, b, c = cp 
 
#  Calculate d component with a dot product and the following equation: 
#    a*x3 + b*y3 + c*z3 = d 
d = np.dot(cp, p3) 
 
#  Find the unit vector 
uv = cp / (cp**2).sum()**0.5 

这个向量表示一个平面,它是我的最大连续性方向(一个地质术语)。我需要得到与上面定义的平面成 90 度角的两个平面。我知道这在线性代数方面可能很简单,但我现在不知所措。我最终需要这个来获得上面定义的三个连续平面的走向和倾角。

编辑:为清楚起见添加了图片

蓝色特征是故障。绿色橄榄球是我的搜索椭圆。我需要弄清楚由该形状定义的平面。我使用断层上数字化的那些绿点来计算第一平面。我不知道如何获得其他两个

请您参考如下方法:

假设您对任何此类飞机都满意:

您已经通过 cp 定义了“连续性平面”。 ortho1 = np.cross(v1, cp) 将为您提供一个与 cp 正交的方向,即您可能请求的平面之一。 然后 ortho2 = np.cross(cp, ortho1) 会给你第二个对应的。