Поверхностное строительство с использованием двух отрезков - PullRequest
1 голос
/ 24 ноября 2010

имеют два отрезка в пространстве, как построить поверхность с двумя отрезками в качестве границы?

Ответы [ 2 ]

4 голосов
/ 24 ноября 2010

Вы можете сделать это параметрически.

Подберите два ваших сегмента, описываемых как:

{s1(t)} = t {a1} + {b1}   (0 <= t <= 1)

{s2(t)} = t {a2} + {b2}   (0 <= t <= 1)

, где {} обозначает векторные величины, {a}, {b} константы.

Тогда для любого tу вас есть две точки в пространстве, по одной в каждом сегменте.

Прямая линия между ними может быть описана следующим образом:

{r(v)} = ({s2(t)} - {s1(t)}) v + {s1(t)}  (0 <= v <= 1 )  

Мы почти на месте.Теперь мы напишем функцию, описывающую поверхность, заменив s1 и s2 их значениями:

{K(v,t)} = t v ( {a2} - {a1} )+ v ({b2} - {b1})  + t {a1} + {b1}  (0<= t,v <=1)

HTH!

Edit

Пример:

a1 = {1, 1, 1};
b1 = {0, 0, 0};
a2 = {1, 1, 0};
b2 = {0, 0, 0};

Show[ParametricPlot3D[
  t v a1 (a2 - a1) + v (b2 - b1) + t a1 + b1, {t, 0, 1}, {v, 0, 1}, 
  AxesLabel -> {"x", "y", "z"}], 
   Graphics3D[{Thick, Red, Line[{b1, a1 + b1}]}], 
   Graphics3D[{Thick, Red, Line[{b2, a2 + b2}]}]]

alt text

Другой пример, показывающий неплоскую поверхность:

a1 = {1, 1, 1};
b1 = {0, 0, 1};
a2 = {1, 0, 0};
b2 = {0, 1, 0};

alt text

1 голос
/ 24 ноября 2010

Два отрезка должны быть копланарными (то есть: оба лежат на поверхности, которую вы хотите восстановить).Перекрестное произведение двух линейных сегментов даст вам нормаль к поверхности (вектор, перпендикулярный поверхности).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...