【问题标题】:Matlab: Calculate intersection point of vector and analytical surfaceMatlab:计算矢量和解析曲面的交点
【发布时间】:2015-06-24 13:29:03
【问题描述】:

我想计算由下式给出的向量在 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 的起始值进行迭代

但是,我似乎无法在这里收敛。知道我的错误在哪里吗?

提前致谢

【问题讨论】:

  • 一个向量不相交它没有位置,它只有一个大小和一个方向。你的意思是你有一条与平面相交的线,还是你想把向量投影到平面上?
  • 我的意思是与从 p 向 n 方向发出的线相交
  • 直线是否可以多次与平面相交?
  • 没有假定被排除在外的
  • 猜猜你可以参数化该行并根据this解决它。您应该能够使用任何 matlab 方程求解器(例如 fzerosolve)求解方程。我想到的另一件事是旋转和平移表面,使线沿着某个轴(例如 x 轴)左右移动。这将为您提供一个其他变量为 0 的函数。

标签: matlab vector iteration intersection surface


【解决方案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)

假设您的问题有一个唯一的解决方案,那么平面上方直线沿 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 中使用 anonymous functionfzero 来完成,如下所示:

dz = @(a) = p3 + a * n3 - fun(p1 + a * n1, p2 + a * n2);
a_intersect = fzero(dz, a0);

其中a0a 的一些(任意)起始猜测。 您可能想阅读一些有关光学光线追踪的信息,我想您可能会在网上找到一些介绍性的大学笔记。这是一个非常标准的问题,例如光线与曲面透镜或抛物面镜的交集。

【讨论】:

  • 感谢您的努力。我试图这样实现它: p = [1;1;1]; n = [0;0;-1]; dz = @(a) p(3) + a * n(3) - test_projsurf([p(1) + a * n(1), (2) + a * n(2)]); a_intersect = fzero(dz, 0.01)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多