bat*_*man 1 c++ math matlab linear-algebra linear-interpolation
我有三个3D点像p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3).我还有一个观点,但我只知道x,y这点像的价值p4(x4,y4,Z),在这Z是我喜欢的计算值.
我敢肯定p4(x4,y4)的一点是通过形成的三角形内p1(x1,y1),p2(x2,y2),p3(x3,y3)通过与德劳内三角的方法检查.如何计算Z点的值p4?我喜欢在C编程中实现它.实际上我正在尝试griddata在MATLAB中实现.
谢谢
p1,p2,p3定义一个平面.您可以通过点和法线来表示它.例如,P=p1,N=(p2-P) x (p3-P)(即,N =的叉积p1p2和p1p3).
现在让p4在同一平面上,它满足平面方程:
(p4-P) · N = 0 %// dot product
? (x4-x1)*N.x + (y4-y1)*N.y + (z4-z1)*N.z = 0
Run Code Online (Sandbox Code Playgroud)
重新排列:
z4 = z1 - ((x4-x1)*N.x + (y4-y1)*N.y)/ N.z
Run Code Online (Sandbox Code Playgroud)
没有线性系统可以解决,你只需要一个交叉产品.
您可以在 P1P2P3 矢量基中表达 P4 坐标。
x4 = x1 + A * (x2 - x1) + B * (x3 - x1)
y4 = y1 + A * (y2 - y1) + B * (y3 - y1)
Run Code Online (Sandbox Code Playgroud)
这是一个易于求解的线性方程组。您必须找到 A 和 B 系数,然后使用它们来计算 z 坐标
z4 = z1 + A * (z2 - z1) + B * (z3 - z1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7932 次 |
| 最近记录: |