我希望在这里得到一些帮助。我是地质学家,所以我的数学背景并不理想。我有一个在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度角的平面。我知道就线性代数而言这可能很简单,但我现在很茫然。我最终需要它来获得上面定义的三个连续性平面的触角和倾角。
编辑:为清晰起见添加了图片
蓝色功能是故障。绿色的橄榄球球是我的搜寻椭圆。我需要找出由该形状定义的平面。我用断层上数字化的那些绿点来计算第一个平面。我不知道如何获得另外两个
答案 0 :(得分:3)
因此,假设您对任何此类飞机感到满意:
您已经有cp
定义“连续性平面”。
ortho1 = np.cross(v1, cp)
将为您提供一个与cp
正交的方向,即您可能请求的飞机之一。
然后ortho2 = np.cross(cp, ortho1)
将给您第二个对应的
答案 1 :(得分:2)
根据您的描述,这就是我想要的:
对于打击,您需要平面与水平面的交点(因此,单位向量与(0,0,1)向量的叉积。
对于倾角,您需要飞机的单位矢量和打击的单位矢量的叉积。
我同意其他评论者的意见-也许自己整理一下数学...如果在Python中实现它时遇到问题,可以进入stackoverflow:)