Extrusion
|
|||
|
|||
Extrusion { beginCap TRUE endCap TRUE ccw TRUE convex TRUE creaseAngle 0 crossSection [1 1, 1 -1, -1 -1, -1 0, 1 1] orientation 0 0 1 0 scale 1 1 solid TRUE spine [0 0 0, 0 1 0] } |
|||
Hier ist
der Querschnitt ein Quadrat, es wird unten in vierfacher und oben in
doppelter Größe eingesetzt. Ersetzt man das zweite scale durch 0 0, so
ergibt sich eine Pyramide.#VRML V2.0 utf8 Viewpoint { position 2 0 10 } Transform { children Shape { appearance Appearance { material Material {}} geometry Extrusion { endCap TRUE beginCap TRUE solid TRUE crossSection [ 1 0 0 1 -1 0 0 -1 1 0 ] spine [ 0 0 0 0 2 0 ] scale [ 4 4 2 2 ] } } } |
|||
Mit Extrusionen lassen sich ganz einfach Drehflächen modelliern: als Trajektorie
nimmt man eine lotrechte Gerade, als Querschnitt einen Kreis in der x-z-Eben
bzw. eine polygonale Annäherung), wie z.B.
hier:#VRML V2.0 utf8 Viewpoint { position 3 4 16 orientation 0 1 0 0.01 } Shape { appearance Appearance { material Material {diffuseColor 1 1 1 } } geometry Extrusion { endCap FALSE solid FALSE crossSection [ -1 -3, -3 -1, -3 1, -1 3, 1 3, 3 1, 3 -1, 1 -3, -1 -3 ] scale [ 0.8 0.8, 0.1 0.1, 0.2 0.2, 0.4 0.4, 0.8 0.8, 1 1, 0.9 0.9 ] spine [ 0 0 0, 0 0.3 0, 0 1.5 0, 0 2 0, 0 4 0, 0 7 0, 0 7 0 ] } }Natürlich müsste man hier den Querschnitt besser an einen Kreis annähern. Man kann die Querschnitte aber auch noch etwas drehen, um ein weniger eckiges Objekt zu erhalten, siehe hier: #VRML V2.0 utf8 Viewpoint { position 3 4 16 orientation 0 1 0 0.01 } Shape { appearance Appearance { material Material {diffuseColor 1 1 1 } } geometry Extrusion { endCap FALSE solid FALSE crossSection [ -1 -3, -3 -1, -3 1, -1 3, 1 3, 3 1, 3 -1, 1 -3, -1 -3 ] scale [ 0.8 0.8, 0.1 0.1, 0.2 0.2, 0.4 0.4, 0.8 0.8, 1 1, 0.9 0.9 ] spine [ 0 0 0, 0 0.3 0, 0 1.5 0, 0 2 0, 0 4 0, 0 7 0, 0 7 0 ] orientation [ 0 1 0 0.2 0 1 0 0.4 0 1 0 0.6 0 1 0 0.8 0 1 0 1 0 1 0 1.2 0 1 0 1.4 ] } } | |||
Allgemeines Verfahren zur Abbildung von Drehflächen mit der Achse y
und mit der Gleichung r2
= x2 + z2
= f(y)2 crossSection [ Punkte eines Kreises mit r=1 ] spine [ 0 yi 0, i=1, ... n ] scale [ f(yi) f(yi), i=1, ... n ] Angenommen: die Parabel y = x2/4 soll um die y-Achse rotieren. r = x = f(y) = 2√y #VRML V2.0 utf8 Viewpoint { position 1 5 12 orientation 1 0 0 -0.1 } Shape { appearance Appearance { material Material {diffuseColor 1 1 1 } } geometry Extrusion { endCap FALSE solid FALSE crossSection [0 1, 0.71 0.71, 1 0, 0.71 -0.71, 0 -1, -0.71 -0.71, -1 0, -0.71 0.71, 0 1 ] scale [ 0 0 , 0.63 0.63, 0.89 0.89, 1.26 1.26, 1.79 1.79, 2.19 2.19, 2.83 2.83 4 4 ] spine [ 0 0 0, 0 0.1 0, 0 0.2 0, 0 0.4 0, 0 0.8 0, 0 1.2 0, 0 2 0 0 4 0 ] } } | |||
Spätestens hier wird es Zeit, sich einige Dinge ein für allemal
vorzubereiten: eine Punkteliste des Einheitskreises und einer
Schraublinie (r=1, Ganghöhe = 4.8), beides auf 24 Unterteilungen des
rechten Winkels (15°). Sollen Radius und Ganghöhe andere Werte haben,
kann man sie mit scale einstellen. Für die Spirale wurde genommen: x = 3*cos(t), y = 5, z = 3*sin(t), alles noch multipliziert mit exp(0.2*t) | |||
Einheitskreis | Einheitskreis | Schraublinie | Spirale |
1.000 0.000, 0.966 0.259, 0.866 0.500, 0.707 0.707, 0.500 0.866, 0.259 0.966, 0.000 1.000, -0.259 0.966, -0.500 0.866, -0.707 0.707, -0.866 0.500, -0.966 0.259, -1.000 0.000, -0.966 -0.259, -0.866 -0.500, -0.707 -0.707, -0.500 -0.866, -0.259 -0.966, 0.000 -1.000, 0.259 -0.966, 0.500 -0.866, 0.707 -0.707, 0.866 -0.500, 0.966 -0.259, 1.000 0.000 |
1.000 0 0.000, 0.966 0 0.259, 0.866 0 0.500, 0.707 0 0.707, 0.500 0 0.866, 0.259 0 0.966, 0.000 0 1.000, -0.259 0 0.966, -0.500 0 0.866, -0.707 0 0.707, -0.866 0 0.500, -0.966 0 0.259, -1.000 0 0.000, -0.966 0 -0.259, -0.866 0 -0.500, -0.707 0 -0.707, -0.500 0 -0.866, -0.259 0 -0.966, 0.000 0 -1.000, 0.259 0 -0.966, 0.500 0 -0.866, 0.707 0 -0.707, 0.866 0 -0.500, 0.966 0 -0.259, 1.000 0 0.000 |
1.000 0 0.000, 0.966 0.2 0.259, 0.866 0.4 0.500, 0.707 0.6 0.707, 0.500 0.8 0.866, 0.259 1 0.966, 0.000 1.2 1.000, -0.259 1.4 0.966, -0.500 1.6 0.866, -0.707 1.8 0.707, -0.866 2 0.500, -0.966 2.2 0.259, -1.000 2.4 0.000, -0.966 2.6 -0.259, -0.866 2.8 -0.500, -0.707 3 -0.707, -0.500 3.2 -0.866, -0.259 3.4 -0.966, 0.000 3.6 -1.000, 0.259 3.8 -0.966, 0.500 4 -0.866, 0.707 4.2 -0.707, 0.866 4.4 -0.500, 0.966 4.6 -0.259, 1.000 4.8 0.000 |
3.000 5.000 0.000 2.750 4.745 0.737 2.340 4.503 1.351 1.813 4.273 1.813 1.217 4.055 2.107 0.598 3.848 2.230 0.000 3.652 2.191 -0.538 3.466 2.009 -0.987 3.289 1.709 -1.324 3.121 1.324 -1.539 2.962 0.889 -1.629 2.811 0.436 -1.600 2.667 0.000 -1.467 2.531 -0.393 -1.248 2.402 -0.721 -0.967 2.280 -0.967 -0.649 2.163 -1.124 -0.319 2.053 -1.190 0.000 1.948 -1.169 0.287 1.849 -1.072 0.526 1.755 -0.912 0.706 1.665 -0.706 0.821 1.580 -0.474 0.869 1.500 -0.233 0.854 1.423 0.000 |
Paraboloide Mit einigen Tricks kann man auch Paraboloide erledigen, weiß man doch, dass sie durch Verschieben einer Parabel längs einer anderen mit paralleler Achse entstehen. D.h. cross section ist eine Parabel und spine ebenfalls, man kann eigentlich gleich dieselben Koordinaten verwenden. Und damit die Querschnittsparabel nicht senkrecht zur spine Parabel geführt wird, muss man sie nur um den Tangentenwinkel arctan ( f' ) zurückdrehen. Je nachdem ob die Parabeln in dieselbe Richtung offen sind oder nicht, erhält man ein elliptisches oder hyperbolisches Paraboloid #VRML V2.0 utf8 Shape { appearance Appearance { material Material {}} geometry Extrusion { endCap FALSE beginCap FALSE solid FALSE crossSection [2.00 2 1.53 1.75 1.13 1.5 0.78 1.25 0.50 1 0.28 0.75 0.13 0.5 0.03 0.25 0.00 0 0.03 -0.25 0.13 -0.5 0.28 -0.75 0.50 -1 0.78 -1.25 1.13 -1.5 1.53 -1.75 2.00 -2 ] spine [-2 2.00 0 -1.75 1.53 0 -1.5 1.13 0 -1.25 0.78 0 -1 0.50 0 -0.75 0.28 0 -0.5 0.13 0 -0.25 0.03 0 0.00 0 0 0.25 0.03 0 0.5 0.13 0 0.75 0.28 0 1 0.50 0 1.25 0.78 0 1.5 1.13 0 1.75 1.53 0 2 2.00 0 ] orientation [ 0 0 1 1.11 0 0 1 1.05 0 0 1 0.98 0 0 1 0.90 0 0 1 0.79 0 0 1 0.64 0 0 1 0.46 0 0 1 0.24 0 0 1 0.00 0 0 1 -0.24 0 0 1 -0.46 0 0 1 -0.64 0 0 1 -0.79 0 0 1 -0.90 0 0 1 -0.98 0 0 1 -1.05 0 0 1 -1.11 ] } } |
|||
Man kann durchaus auch anspruchsvollere Objekte entwerfen, z.B. ein
Kreiskonoid oder ein
Plückerkonois.#VRML V2.0 utf8 Viewpoint { position 3 4 16 orientation 0 1 0 0.01 } Shape { appearance Appearance { material Material {diffuseColor 1 1 1 } } geometry Extrusion { beginCap FALSE solid FALSE crossSection [1.000 0.000, usw. usf. die ganze Liste 1.000 0.000 ] scale [ 2 2, 2 0 ] spine [ 0 0 0, 0 4 0 ] } } |
|||
Eine (halbe)
Normalkreisschraubfläche. Wie bereits angemerkt wird die
Querschnittsfläche so an der als Kurve gedachten Trajektorie geführt,
dass ihre Ebene stets normal zur Trajektorie steht. Daher ergibt sich
hier eben eine Normalkreisschraubfläche (oder Schraubrohrfläche).
Darunter zu sehen ist eine
Wendelfläche. Sie
entsteht durch Extrusion einer Strecke mit einigen Zwischenpunkten
entlang einer Schraublinie. Auf dieselbe Weise entsteht eine
Spiralwendelfläche, die Extrusion wird entlang einer Spirale ausgeführt.#VRML V2.0 utf8 Shape { appearance Appearance { material Material { } } geometry Extrusion { creaseAngle 1.57 endCap FALSE beginCap FALSE solid FALSE crossSection [ 1.000 0.000, ... usw. usf. ... unser Kreis, oder auch nur ein Halbkreis ] spine [ 1.000 0 0.000, ... usw. usf. ... unsere Schraublinie, ev. mit halben y-Koordinaten ] scale [0.8 0.8] } } #VRML V2.0 utf8 Background { skyColor 0.5 0.5 1.0 } Viewpoint { position 1 5 12 orientation 1 0 0 -0.2 } DEF schraub1 Transform { children Shape { appearance Appearance { material Material {}} geometry Extrusion { endCap TRUE beginCap TRUE solid FALSE crossSection [ 2 0, 1.5 0, 1 0, 0.5 0, 0 0, -0.5 0, -1 0, -1.5 0, -2 0 ] spine [ 1.000 0 0.000, ... usw. usf., unsere Schraublinie ] } }} DEF Uhr TimeSensor { cycleInterval 6.0 startTime 0 loop TRUE } DEF Animation OrientationInterpolator { key [ 0, 0.33, 0.66, 1 ] keyValue [ 0 1 0 0, 0 1 0 2.1, 0 1 0 4.2, 0 1 0 0 ] } ROUTE Uhr.fraction_changed TO Animation.set_fraction ROUTE Animation.value_changed TO schraub1.rotation #VRML V2.0 utf8 Viewpoint { position 1 5 12 orientation 1 0 0 -0.2 } Shape { appearance Appearance { material Material { diffuseColor 0 1 0 } } geometry Extrusion { creaseAngle 1.57 endCap FALSE beginCap FALSE solid FALSE crossSection [ 1.000 0.000, ... usw. usf. ... unser Kreis, oder auch nur ein Halbkreis ] spine [ 3.000 5.000 0.000 usw. usf. die Spirale ] scale [1.000 1.000 0.949 0.949 0.901 0.901 0.855 0.855 0.811 0.811 0.770 0.770 0.730 0.730 0.693 0.693 0.658 0.658 0.624 0.624 0.592 0.592 0.562 0.562 0.533 0.533 0.506 0.506 0.480 0.480 0.456 0.456 0.433 0.433 0.411 0.411 0.390 0.390 0.370 0.370 0.351 0.351 0.333 0.333 0.316 0.316 0.300 0.300 0.285 0.285 ] } } Shape {appearance Appearance {material Material {diffuseColor 1 0 0} } geometry Sphere {radius 0.2 } } |
|||
Die nächsten Skripte zeigen Torusflächen.
Das erste ist sehr grob interpoliert zur deutlicheren Sichtbarkeit des
Gedankens, der zweite ist sehr fein und ist mit einer
herumrollenden Kugel
versehen. Der Querschnitt ist ein der Wulstkreis mit w=3 angenommen und acht seiner Punkte eingetragen, dann wurde eine Folge von Hilfswinkeln t = 0", 45" usw. genommen und als spine die Punkte mit der Höhe sin(t) auf der y-Achse genommen und dann die scale Werte wie folgt berechnet: als erzeugender Kreisradius wurde r = 1 angenommen. Der Torusparallelkreis mit der geografischen Breite t hat den Radius p = r*cos(t) + (w-r), d.h. der Wulstkreis wird mit dem Faktor p/w geschrumpft. Der erste scale Wert ist 1 1, der zweite für t = 45° ist (1*cos 45° + 2)/3 = 0.902 usw. #VRML V2.0 utf8 Shape { appearance Appearance { material Material {}} geometry Extrusion { endCap FALSE beginCap FALSE solid FALSE crossSection [ 0 3, 2.12 2.12, 3 0, 2.12 -2.12, 0 -3, -2.12 -2.12, -3 0, -2.12 2.12, 0 3 ] spine [ 0 0 0, 0 -0.71 0, 0 -1 0, 0 -0.71 0, 0 0 0] scale [ 1 1, 0.902 0.902, 0.667 0.667, 0.43 0.43, 0.333 0.333] } } #VRML V2.0 utf8 Shape { appearance Appearance { material Material {}} geometry Extrusion { endCap FALSE beginCap FALSE solid FALSE crossSection [ 3 0, 2.97 0.39, 2.89 0.78, 2.77 1.14, 2.59 1.50, 2.38 1.82, 2.12 2.12, 1.82 2.38, 1.50 2.59, 1.14 2.77, 0.78 2.89, 0.39 2.97, 0 3, -0.39 2.97, -0.78 2.89, -1.14 2.77, -1.50 2.59, -1.82 2.38, -2.12 2.12, -2.38 1.82, -2.59 1.50, -2.77 1.14, -2.89 0.78, -2.97 0.39, -3 0, -2.97 -0.39, -2.89 -0.78, -2.77 -1.14, -2.59 -1.50, -2.38 -1.82, -2.12 -2.12, -1.82 -2.38, -1.50 -2.59, -1.14 -2.77, -0.78 -2.89, -0.39 -2.97, 0 -3, 0.39 -2.97, 0.78 -2.89, 1.14 -2.77, 1.50 -2.59, 1.82 -2.38, 2.12 -2.12, 2.38 -1.82, 2.59 -1.50, 2.77 -1.14, 2.89 -0.78, 2.97 -0.39, 3 0 ] spine [ 0 0 0, 0 -0.130 0, 0 -0.258 0, 0 -0.382 0, 0 -0.5 0, 0 -0.608 0, 0 -0.707 0, 0 -0.793 0, 0 -0.866 0, 0 -0.923 0, 0 -0.965 0, 0 -0.991 0, 0 -1 0, 0 -0.991 0, 0 -0.965 0, 0 -0.923 0, 0 -0.866 0, 0 -0.793 0, 0 -0.707 0, 0 -0.608 0, 0 -0.5 0, 0 -0.382 0, 0 -0.258 0, 0 -0.130 0, 0 0 0 ] scale [ 1 1 , 0.997 0.997, 0.988 0.988, 0.974 0.974, 0.955 0.955, 0.931 0.931, 0.902 0.902, 0.869 0.869, 0.833 0.833, 0.794 0.794, 0.752 0.752, 0.710 0.710, 0.666 0.666, 0.623 0.623, 0.580 0.580, 0.539 0.539, 0.5 0.5 , 0.463 0.463, 0.430 0.430, 0.402 0.402, 0.377 0.377, 0.358 0.358, 0.344 0.344, 0.336 0.336, 0.333 0.333 ] } } } DEF Kugel Transform { children [ Transform { translation 0 0 2 children [ Shape { appearance Appearance { material Material { diffuseColor 1 0 0} } geometry Sphere {radius 0.99} } ] } ] } DEF Rotierer OrientationInterpolator { key [0 0.5 1] keyValue [0 1 0 0, 0 1 0 3.14, 0 1 0 6.28] } DEF Uhr TimeSensor { startTime 0.0 stopTime 1.0 cycleInterval 5.0 loop TRUE } DEF Schalter TouchSensor {} ROUTE Schalter.touchTime TO Uhr.set_startTime ROUTE Uhr.fraction_changed TO Rotierer.set_fraction ROUTE Rotierer.value_changed TO Kugel.set_rotation |
|||
Sogar ein etwas schräges
Bauwerk wie der
Murturm lässt sich leicht entwerfen (wobei aber nur auf die
prinzipielle Geometrie geachtet wurde).#VRML V2.0 utf8 Viewpoint { position 2 6 10 orientation 1 0 0 -0.3 } Shape { appearance Appearance { material Material {diffuseColor 0.5 0.5 1}} geometry Extrusion { endCap FALSE beginCap FALSE solid FALSE crossSection [ 1 0, 1 -0.75, 1 0, 2 0, 2 -0.75, 2 0 ] spine [ 1.000 0 0.000, 0.707 0.3 0.707, 0.000 0.6 1.000, -0.707 0.9 0.707, -1.000 1.2 0.000, -0.707 1.5 -0.707, 0.000 1.8 -1.000, 0.707 2.1 -0.707, 1.000 2.4 0.000 0.707 2.7 0.707, 0.000 3 1.000, -0.707 3.3 0.707, -1.000 3.6 0.000, -0.707 3.9 -0.707, 0.000 4.2 -1.000, 0.707 4.5 -0.707, 1.000 4.8 0.000 ] scale [ 1 1 ] } } |
|||