Matlab:计算矢量与解析曲面的交点
我想计算R^3中向量的交点,由 p+alpha*n,其中x是空间向量,n是另一个向量,alpha是要确定的标量 曲面由公式以解析形式给出 f(x,y)=[x,y,z(x,y)],其中z(x,y)可以是任意非线性曲面描述 我设置了一个线性化:Matlab:计算矢量与解析曲面的交点,matlab,vector,iteration,intersection,surface,Matlab,Vector,Iteration,Intersection,Surface,我想计算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] (
[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的起始值
然而,我似乎无法在这里收敛。知道我的错在哪里吗
提前感谢您可以将公式写成
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)
假设您的问题有唯一的解决方案,则平面上方直线沿z方向dz
的高度作为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中使用以下类似工具完成:
其中a0
是a
的一些(任意)起始猜测。
你们可能想读一点关于光线追踪的知识,我想你们可能会在网上找到一些大学的入门笔记。这是一个非常标准的问题,用于寻找光线与曲面透镜或抛物面镜的交点。矢量不相交,它没有位置,只有大小和方向。你的意思是有一条与平面相交的线,还是要将向量投影到平面上?我的意思是与从p沿nIs方向发出的线相交。这条线可能与平面相交不止一次?不,这被假定为排除在外。我猜你可以参数化这条线并求解它根据。您应该能够使用任何matlab方程求解器(例如
fzero
或solve
)求解方程。我想到的另一件事是旋转和平移曲面,使线沿着某个轴(如x轴)左右移动。这将为您提供一个其他变量为0的函数。感谢您的努力。我试着这样实现它:p=[1;1;1];n=[0;0;-1];dz=@(a)p(3)+a*n(3)-测试项目([p(1)+a*n(1)、(2)+a*n(2)]);a_相交=f0(dz,0.01)
dz = @(a) = p3 + a * n3 - fun(p1 + a * n1, p2 + a * n2);
a_intersect = fzero(dz, a0);