2015-05-25 2 views
0

У меня есть поверхность Z на сетке X-Y, для которой я хочу найти точку пересечения с линией. Я до сих пор этот код для нахождения пересечения:нахождение пересечения прямой с немонотонной произвольной поверхностью?

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

Я интерполирую его с помощью interp2. он не является гладким в том смысле, что линия пересекает поверхность несколько раз, потому что поверхность «wiggly» – Nan

+0

Я бы не назвал это негладким. –

ответ

0

Возможный подход - проецировать луч на область XY и нарисовать соответствующую линию Брешенхама. Когда вы идете по этой линии, ячейке сетки на ячейку сетки, вы вычисляете высоты Z вдоль луча и проверяете, перекрывает ли их диапазон диапазон высот поверхности (т. Е. Минимальное и максимальное значение в этой ячейке).

Если да, вам необходимо найти трехмерное пересечение между лучом и интерполирующей поверхностью, гиперболическим параболоидом. Если пересечение действительно попадает внутрь рассматриваемой ячейки сетки, все готово. В противном случае продолжите марш вдоль луча.

+0

Спасибо, это возможное решение, но это займет слишком много времени, если я хочу сделать это для миллионов лучей. – Nan

+0

Если вы не знаете какого-либо конкретного свойства поверхности, вы не можете избежать этого исследования. Это проблема Omega (N), когда N - количество ячеек сетки на стороне. –

0

Преобразуйте поверхность в сетку matlab, затем используйте this code.

 Смежные вопросы

  • Нет связанных вопросов^_^