我在X-Y网格上有一个表面Z,我想找到一个带有直线的交点。到目前为止,我用这个代码来寻找交集:
x_ray = x_source + t * x_dir
y_ray = y_source + t * y_dir
z_ray = z_source + t * z_dir
height_above_plane = @(t) z_source + t * z_dir - interp2(X, Y, Z, ...
x_source + t*x_dir, y_source + t*y_dir)
t_intercept = fzero(height_above_plane, 0);
我的问题是当我的表面“摇摆”时,该函数有几个零交叉点,我想找到它们中的最小值。 我怎样才能做到这一点? 感谢
答案 0 :(得分:0)
一种可能的方法是将光线投影到XY域上并绘制相应的Bresenham线。沿着这条线,每个网格单元的网格单元,您将计算沿光线的Z高度并检查它们的范围是否与表面的高度范围重叠(即该单元格中的最小值和最大值)。
如果是,则必须找到光线与插值曲面之间的三维交点,即双曲抛物面。如果交叉点确实落在所考虑的网格单元内,那么就完成了。否则,沿着光线继续游行。
答案 1 :(得分:0)
将曲面转换为matlab网格,然后使用this code。