2010-11-24 1 views

Antwort

4

Sie können dies parametrisch tun.

nehme an Ihre zwei von beschrieben Segmente:

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

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

, wo die {} Vektorgrößen angibt, {a}, {b} Konstanten.

Dann haben Sie für jedes t zwei Punkte im Raum, eins in jedem Segment.

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

Wir sind fast da:

Die gerade Linie zwischen ihnen kann beschrieben werden. Jetzt schreiben wir die Funktion, die die Oberfläche beschreibt, indem wir s1 und s2 durch ihre Werte ersetzen:

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

HTH!

bearbeiten

ein Beispiel:

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

Ein weiteres Beispiel zeigt, die eine nicht-ebene Oberfläche:

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

alt text

1

Die zwei Liniensegmente müssen koplanar sein (dh beide liegen auf der Oberfläche, die Sie rekonstruieren möchten). Ein Kreuzprodukt der beiden Liniensegmente gibt Ihnen die Normale zur Oberfläche (ein Vektor senkrecht zur Oberfläche).

Woran ich mich zu diesem Zeitpunkt nicht sicher bin, ist, was Sie unter den Liniensegmenten verstehen, die die Grenze bestimmen. Wenn die Enden der Liniensegmente die 4 Punkte einer Quad-Grenze sind und Sie diese in ein unterteiltes Patch verwandeln möchten, können Sie zwischen den Eckpunkten bilinear interpolieren, um die Koordinaten für Ihr Patch-Mesh zu erzeugen.

+0

Die beiden Liniensegmente sind nicht koplanar – user496949

+0

Wenn sie nicht koplanar sind, wird die von ihnen gebildete Fläche nicht flach sein. – geofftnz

+0

die Oberfläche muss nicht flach sein – user496949