我想计算由给定的向量的R ^ 3中的交点 p + alpha * n其中x是空间矢量,n是另一个矢量,alpha是要确定的标量。
通过配方以分析形式给出表面
f(x,y)= [x,y,z(x,y)]其中z(x,y)可以是任意非线性表面描述
我设置了线性化:
[n1 n2 n3 ] (d_alpha)= [p1 + alpha*n1 - x]
[-1 0 -dz(x,y)/dx] (d_x) = [p2 + alpha*n2 - y]
[ 0 -1 -dz(x,y)/dx] (d_y) = [p3 + alpha*n3 - z(x,y)]
并搜索迭代alpha,x和y的起始值
但是,我似乎无法融合在这里。知道我的错误在哪里吗?
提前致谢
答案 0 :(得分:1)
您可以将等式编写为
x_line(a) = p1 + a * n1
y_line(a) = p2 + a * n2
z_line(a) = p3 + a * n3
z_plane(x, y) = fun(x, y)
假设您的问题有一个独特的解决方案,那么作为dz
的函数,沿着平面上方线的z方向a
的高度就是
dz(a) = z_line(a) - fun(x_line(a), y_line(a))
= p3 + a * n3 - fun(p1 + a * n1, p2 + a * n2)
要查找线与平面的交点,您只需找到a
为零的dz
值。这可以在Matlab中使用anonymous function和fzero来完成,如下所示:
dz = @(a) = p3 + a * n3 - fun(p1 + a * n1, p2 + a * n2);
a_intersect = fzero(dz, a0);
其中a0
是a
的某些(任意)开始猜测。
您可能需要阅读一些关于光线追踪的内容,我想您可能会在网上找到一些介绍性的大学笔记。这是寻找例如非常标准的问题。光线与曲面镜或抛物面镜的交点。