2010-11-24 2 views

Répondre

4

Vous pouvez le faire de manière paramétrique.

Supose vos deux segments décrits par:

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

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

où {} indique les quantités vectorielles, {a}, {b} constantes. Puis, pour tout t, vous avez deux points dans l'espace, un dans chaque segment.

La ligne droite entre les peut être décrit par:

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

Nous y sommes presque. Maintenant, nous écrivons la fonction décrivant la surface, en remplaçant par leurs valeurs s1 et s2:

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

HTH!

Modifier

Exemple:

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

Un autre exemple, qui montre une surface non plane:

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

alt text

1

Les deux segments de ligne devront être coplanaires (c'est-à-dire que les deux segments se trouvent sur la surface que vous voulez reconstruire). Un produit croisé des deux segments de ligne vous donnera la normale à la surface (un vecteur perpendiculaire à la surface). Ce dont je ne suis pas sûr à ce stade, c'est ce que vous voulez dire par les segments de ligne qui déterminent la limite. Si les extrémités des segments de ligne sont les 4 points d'une limite quadruple et que vous souhaitez transformer cela en un patch subdivisé, vous pouvez interpoler de manière bilinéaire entre les points d'angle pour produire les coordonnées de votre maillage de patch.

+0

les deux segments de ligne ne sont pas coplanaires – user496949

+0

S'ils ne sont pas coplanaires, la surface qu'ils forment ne sera pas plate. – geofftnz

+0

la surface n'a pas besoin d'être plate – user496949

Questions connexes