59
Grafiken Einfache Grafiken aus Primitiven erstellen Ein Gitter ClearAll"Global‘" GitterPunkteP0, dx, dy, nxInteger, nyInteger : TableP0 i dx, j dy, i, 0, nx, j, 0, ny g GitterPunkte.3, .3, .1, .1, 5, 7; g Chop MatrixForm 0.3 0.3 0.3 0.2 0.3 0.1 0.3 0 0.3 0.1 0.3 0.2 0.3 0.3 0.3 0.4 0.2 0.3 0.2 0.2 0.2 0.1 0.2 0 0.2 0.1 0.2 0.2 0.2 0.3 0.2 0.4 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.4 0 0.3 0 0.2 0 0.1 0 0 0 0.1 0 0.2 0 0.3 0 0.4 0.1 0.3 0.1 0.2 0.1 0.1 0.1 0 0.1 0.1 0.1 0.2 0.1 0.3 0.1 0.4 0.2 0.3 0.2 0.2 0.2 0.1 0.2 0 0.2 0.1 0.2 0.2 0.2 0.3 0.2 0.4 Polygon-Primitiv kann auch mit Liste von Punktlisten als Argument verwendet werden und ist in Mathematica-Code meist in dieser Form anzutreffen. Ist ein Design-Problem.. Besser wäre der Name PolygonList gewesen. Wir verwenden deshalb nur einfache Polygone. Gitterg : Moduled Dimensionsg, Join TablePolygongi, j,gi, j 1,gi 1, j 1,gi 1, j, i, d1 1, j, d2 1 Shortg1 Gitterg,7 Polygon0.3, 0.3, 0.3, 0.2, 0.2, 0.2, 0.2, 0.3, 33, Polygon0.1, 0.3, 0.1, 0.4, 0.2, 0.4, 0.2, 0.3 Daraus eine 2D-Grafik erzeugen, mit grünen Flächen sowie kurz-gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1

grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Embed Size (px)

Citation preview

Page 1: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Grafiken

à Einfache Grafiken aus Primitiven erstellen

� Ein Gitter

ClearAll@"Global‘*"DGitterPunkte@P0_, dx_, dy_, nx_Integer, ny_IntegerD :=Table@P0 + 8i*dx, j*dy<, 8i, 0, nx<, 8j, 0, ny<Dg = [email protected], -.3<, .1, .1, 5, 7D;g �� Chop �� MatrixFormi

k

jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj

K -0.3-0.3

O K -0.3-0.2

O K -0.3-0.1

O K -0.30

O K -0.30.1

O K -0.30.2

O K -0.30.3

O K -0.30.4

O

K -0.2-0.3

O K -0.2-0.2

O K -0.2-0.1

O K -0.20

O K -0.20.1

O K -0.20.2

O K -0.20.3

O K -0.20.4

O

K -0.1-0.3

O K -0.1-0.2

O K -0.1-0.1

O K -0.10

O K -0.10.1

O K -0.10.2

O K -0.10.3

O K -0.10.4

O

K 0-0.3

O K 0-0.2

O K 0-0.1

O K 00O K 0

0.1O K 0

0.2O K 0

0.3O K 0

0.4O

K 0.1-0.3

O K 0.1-0.2

O K 0.1-0.1

O K 0.10

O K 0.10.1

O K 0.10.2

O K 0.10.3

O K 0.10.4

O

K 0.2-0.3

O K 0.2-0.2

O K 0.2-0.1

O K 0.20

O K 0.20.1

O K 0.20.2

O K 0.20.3

O K 0.20.4

O

y

{

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Polygon −Primitiv kann auch mit Liste von Punktlisten als Argument verwendet werden und ist in Mathematica−Code meist in dieser Form anzutreffen. Ist ein Design−Problem.. Besser wäre der Name PolygonList gewesen.

Wir verwenden deshalb nur einfache Polygone.

Gitter@g_D := Module@8d = Dimensions@gD<,Join �� Table@Polygon@8gPi, jT, gPi, j + 1T, gPi + 1, j + 1T, gPi + 1, jT<D,8i, dP1T - 1<, 8j, dP2T - 1<DD

Short@Hg1 = Gitter@gDL, [email protected], -0.3<, 8-0.3, -0.2<, 8-0.2, -0.2<, 8-0.2, -0.3<<D,�33�, [email protected], 0.3<, 80.1, 0.4<, 80.2, 0.4<, 80.2, 0.3<<D<

Daraus eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive.

grafik.nb 1

Page 2: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Graphics@8FaceForm@LightBlueD, EdgeForm@8Dotted, Black<D, g1<, Axes ® TrueD

-0.3 -0.2 -0.1 0.1 0.2

-0.3

-0.2

-0.1

0.1

0.2

0.3

0.4

Dasselbe als GraphicsComplex −Objekt:

GitterComplex@P0_, dx_, dy_, nx_Integer, ny_IntegerD :=GraphicsComplex@Join �� Table@P0 + 8i*dx, j*dy<, 8i, 0, nx<, 8j, 0, ny<D �� Chop,Join �� Table@Polygon@8Hny + 1L i + j + 1, Hny + 1L i + j + 2,

Hny + 1L Hi + 1L + j + 2, Hny + 1L Hi + 1L + j + 1<D, 8i, 0, nx - 1<, 8j, 0, ny - 1<DD

grafik.nb 2

Page 3: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

gc = [email protected], -.3<, .1, .1, 5, 7D;Graphics@8FaceForm@LightBlueD, EdgeForm@BlackD, gc<D

� GitterPlot und ParametricPlot3D

g ist das Gitter der Parameterwerte, f: R2® R3 die darzustellende parametrisierte Fläche. GitterPlot erzeugt wieder ein komplexes Grafikprimitiv vom Typ

Polygon .

Zu beachten ist, dass in unserer Anwendung f einstellig ist und als Argument einen Punkt P Î R2übergeben bekommt.

GitterPlot@f_, g_D := Module@8d = Dimensions@gD<,Join �� Table@Polygon@f �� 8gPi, jT, gPi, j + 1T, gPi + 1, j + 1T, gPi + 1, jT<D,8i, dP1T - 1<, 8j, dP2T - 1<D D

grafik.nb 3

Page 4: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Anwendung : Die Tangentialfläche an die getwistete Kubik It , t2, t3M.

Clear@fDf@8t_, u_<D := 9t + u, t2 + 2 t u, t3 + 3 t2 u=g2 = GitterPlot@f, gD;

Daraus wird mit entsprechenden Direktiven ein Graphics3D −Objekt erzeugt. Hier eins, das in einem dunklen Raum in der Telekomfarbe glüht.

Graphics3D@8Glow@MagentaD, g2<,Lighting -> 8Black<, Boxed -> False, ViewPoint ® 82, 0, 3<D

grafik.nb 4

Page 5: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Und hier dasselbe Bild mit ParametricPlot3D .

ParametricPlot3DA9t + u, t2 + 2 t u, t3 + 3 t2 u=, 8t, -.3, .2<, 8u, -.3, .4<, PlotPoints -> 3,

Mesh -> All, Boxed ® False, Axes -> False, ViewPoint ® 82, 0, 3<, PlotRange ® AllE

grafik.nb 5

Page 6: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

In einer Realisierung als GraphicsComplex −Objekt müssen nur die Punkte transformiert werden. Sie brauchen weiter die Funktion GitterComplex aus dem letzten Abschnitt.

GitterComplexPlot@f_, P0_, dx_, dy_, nx_Integer, ny_IntegerD :=With@8gc = GitterComplex@P0, dx, dy, nx, nyD<, GraphicsComplex@f �� gcP1T, gcP2TDD

g3 = GitterComplexPlot@f, 8-.3, -.3<, .1, .1, 5, 7D;Graphics3D@8Glow@YellowD, g3<,Lighting -> 8Black<, Boxed -> False, ViewPoint ® 82, 0, 3<D

grafik.nb 6

Page 7: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

grafik.nb 7

Page 8: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

� Ein Torus

Ein Torus als GitterPlot.

Clear@tf, s, dDtf@8u_, t_<D := Module@8r = 8Cos@tD, Sin@tD, 0<, b = 80, 0, 1<<,r + s r*Sin@uD + s b*Cos@uDD

d = 20; s = .3;g4 = GitterPlot@tf, GitterPunkte@80, 0<, 2 Pi�d, 2 Pi�d, d, dDD;Graphics3D@g4, Boxed ® False, AspectRatio ® 1D

Und als GraphicsComplex .

grafik.nb 8

Page 9: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

torusFunction@8t_, u_<, s_, d_D := Module@8r = 8Cos@tD, Sin@tD, 0<, b = 80, 0, 1<<,r + s r*Sin@uD + s b*Cos@uD �� ND

Torus@s_, d_D :=GitterComplexPlot@torusFunction@ð, s, dD &, 80, 0<, 2 Pi�d, 2 Pi�d, d, dDg5 = [email protected], 5D;Graphics3D@g5, Boxed ® False, AspectRatio ® 1D

à Die Farbsysteme von Mathematica

� Die verschiedenen Farbsysteme

Die Farbsysteme RGB und CMYK entsprechen einander nicht genau. −− Nun doch.

grafik.nb 9

Page 10: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

ArrayPlot@88Cyan, CMYKColor@1, 0, 0, 0D<,8Magenta, CMYKColor@0, 1, 0, 0D<, 8Yellow, CMYKColor@0, 0, 1, 0D<<, Mesh ® TrueD

Der Zusammenhang zwischen Hue und RGB:

ArrayPlot@8Table@Hue@iD, 8i, 0, 1, .1<D, Table@Blend@8Red, Yellow, Green, Cyan, Blue, Magenta, Red<, iD, 8i, 0, 1, .1<D<, Mesh ® TrueD

grafik.nb 10

Page 11: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Hue mit dem Sättigungsparameter

ArrayPlot@8Table@Hue@1, iD, 8i, 0, 1, .1<D,Table@Blend@8Red, White<, 1 - iD, 8i, 0, 1, .1<D<D

Hue mit dem Helligkeitsparameter.

ArrayPlot@8Table@Hue@1, 1, iD, 8i, 0, 1, .1<D,Table@Blend@8Red, Black<, 1 - iD, 8i, 0, 1, .1<D<D

Mathematica stellt eine große Menge von Farbpaletten aus den verschiedensten Anwendungsgebieten bereit. Diese können aus der mitgelieferten ColorData −Sammlung über ein Schlüsselwort als ColorDataFunction −Objekt extrahiert werden. Eine solche ColorDataFunction ist eine Funktion aus einem meist als reelles Intervall gegebenen Argumentbereich in ein Farbspektrum spezieller, genauestens ausgewählter ("carefully chosen") RGB−Werte.

c = ColorData@"Rainbow"DArrayPlot@8Table@c@iD, 8i, 0, 1, .01<D<, AspectRatio -> .1D

ColorDataFunctionB80, 1<, F

ColorData@D8Gradients, Indexed, Named, Physical<

ColorData@"Physical"D8BlackBodySpectrum, HypsometricTints, VisibleSpectrum<

ColorData@"VisibleSpectrum"D

ColorDataFunctionB8380, 750<, F

grafik.nb 11

Page 12: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Überdeckungen und Transparenz in 2D−Grafiken

Zweidimensionale Flächen überdecken sich, was passiert? Hier ein Beispiel mit teilweiser Durchsichtigkeit.

r1 = Rectangle@8-2, -1<, 82, 1<D;r2 = Rectangle@8-1, -2<, 81, 2<D;g = Graphics@8Green, r1, [email protected], Yellow, r2<D

ColorOutput funktioniert nicht und ist als obsolet markiert, aber der Ersatz ColorFunction ist noch nicht einsatzbereit.Der Punkt muss grau sein und nicht grün (und ist es auch in Version 5.1).

grafik.nb 12

Page 13: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

g = Graphics@[email protected], Green, Point@80, 0<D<D

grafik.nb 13

Page 14: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Show@g, ColorOutput ® GrayLevelD

grafik.nb 14

Page 15: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

� Farbgebung und Rastergrafiken

gOut = Plot@Sin@xD, 8x, 0, 10<D

2 4 6 8 10

-1.0

-0.5

0.5

1.0

Export@"test.gif", gOutD;gIn = Import@"test.gif"D

ByteCount �� 8gOut, gIn<810032, 321584<

gIn �� HeadGraphics

grafik.nb 15

Page 16: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

List �� Head �� gIn

8Raster, Rule, Rule, Rule<

gInPðT & �� 82, 3, 4<8ImageSize ® 8360, 217<, PlotRange ® 880, 360<, 80, 217<<, Background ® None<

Show@gIn, Axes -> TrueD

0 50 100 150 200 250 300 3500

50

100

150

200

r = gInP1T;List �� Head �� r

8List, List, Rule, Rule<

rP1T �� Dimensions8217, 360<

rP2T880, 0<, 8360, 217<<

c = rP4, 2T;c �� ShortRGBColor �� 880., 0., 0., 1.<,�254�, 80., 0., 0., 1.<<Pð1T &

rP1TPRange@5, 9D, Range@7, 12DT �� MatrixFormi

k

jjjjjjjjjjjjjjjjj

251 251 251 251 251 251251 221 48 1 49 221251 251 251 1 251 251251 251 251 1 251 251251 251 251 1 251 251

y

{

zzzzzzzzzzzzzzzzz

grafik.nb 16

Page 17: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

r1 = rP1TPRange@5, 25D, Range@1, 55DT;Graphics@Raster@r1�300DD

Graphics@Raster@rP1T, ColorFunction -> HGrayLevel@ð�256D &LDD

gIn = Import@"ExampleData�rose.gif"D

grafik.nb 17

Page 18: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

r = gInP1T;Graphics@Raster@rP1T, ColorFunction -> HGrayLevel@ð�256D &LD, Axes -> TrueD

50 100 150 200

50

100

150

à Das Beleuchtungsmodell

� Visualisierung der Standardbeleuchtung

Standard−Lichtquellen auf einer stark spiegelnden Kugel: Ambientes Licht und drei (die Dokumentation behauptet vier) Lichtquellen in den Farben Rot, Grün, Blau, die mit der Kamera starr verbunden sind.

grafik.nb 18

Page 19: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

g = Graphics3D@[email protected], Specularity@1, 300D, Sphere@D<D

AbsoluteOptions@g, viewOptions = 8ViewPoint, ViewCenter, ViewVertical<D8ViewPoint ® 81.3, -2.4, 2.<, ViewCenter ® 80.5, 0.5, 0.5<, ViewVertical ® 80., 0., 1.<<

ImageScaled ist angeblich relativ zum ImageSize . Im 2D−Fall ist plausibel, was darunter zu verstehen ist, nicht aber im 3D−Fall.

grafik.nb 19

Page 20: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

v = 881, 0<, 80, 1<<;Graphics@Line@ImageScaled �� 8ð, 80.1, 0.1<<D & �� v, Axes -> TrueD

-1.0 -0.5 0.5 1.0

-1.0

-0.5

0.5

1.0

Obwohl ImageScaled ... und sie bewegt sich doch.

grafik.nb 20

Page 21: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

v = 881, 0, 0<, 80, 1, 0<, 80, 0, 1<<;Graphics3D@Line@ImageScaled �� 8ð, 80, 0, 0<<D & �� v, Boxed -> FalseD

Früher gab es drei Lichtquellen. Ist auch jetzt noch so im Gegensatz zur Beschreibung im Hilfesystem. Allein ambientes Licht scheint noch eine weitere Portion dabei zu sein. Der eps−Export funktioniert hier nicht richtig − die Spielegeffekte werden falsch dargestellt.

v = 881, 0, 1<, 81, 1, 1<, 80, 1, 1<<;c = 8Red, Green, Blue<;l0 = 8"Ambient", [email protected]<;l = Table@8"Directional", cPiT, ImageScaled �� 8vPiT, 8.5, .5, .5<<<, 8i, 1, 3<D;u = GraphicsGrid@88g, Show@g, Lighting ® lD, Show@g, Lighting ® "Neutral"D<<D

grafik.nb 21

Page 22: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Leider funktioniert der eps−Export dieser Grafik nicht. Deshalb der Umweg über eine jpg−Grafik mit leidlicher Auflösung. Bei größeren Auflösungen hat auch der jpg−Export so seine Probleme.

Export@"test.jpg", u, ImageSize -> 30 860, 25<D

� Probleme mit der Beleuchtung (1)

Obwohl ImageScaled bewegen sich die Lichtreflexe mit der Grafik und sind außerdem an der falschen Stelle.

l = Table@8"Point", cPiT, ImageScaled@vPiTD<, 8i, 1, 3<D;Show@g, Lighting ® l, Axes -> TrueD

-1.0

-0.5

0.0

0.5

1.0

-1.0

-0.5

0.0

0.5

1.0

-1.0

-0.5

0.0

0.5

1.0

Hier werden absolute Koordinaten für die Lichtquellenpunkte verwendet und es sieht gut aus.

grafik.nb 22

Page 23: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

l = Table@8"Point", cPiT, vPiT<, 8i, 1, 3<D;Show@g, Lighting ® l, Axes -> TrueD

-1.0

-0.5

0.0

0.5

1.0

-1.0

-0.5

0.0

0.5

1.0

-1.0

-0.5

0.0

0.5

1.0

Mit Spot−Licht ist es nicht viel anders.

grafik.nb 23

Page 24: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

l = Table@8"Spot", cPiT, ImageScaled �� 8vPiT, 8.5, .5, .5<<, 50 °<, 8i, 1, 3<D;Show@g, Lighting ® l, Axes -> TrueD

-1.0

-0.5

0.0

0.5

1.0

-1.0

-0.5

0.0

0.5

1.0

-1.0

-0.5

0.0

0.5

1.0

grafik.nb 24

Page 25: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

l = Table@8"Spot", cPiT, 8vPiT, 8.5, .5, .5<<, 50 °<, 8i, 1, 3<D;Show@g, Lighting ® l, Axes -> TrueD

-1.0

-0.5

0.0

0.5

1.0

-1.0

-0.5

0.0

0.5

1.0

-1.0

-0.5

0.0

0.5

1.0

� Probleme mit der Beleuchtung (2)

Kurz − mit der Beleuchtung scheint noch vieles im Argen zu liegen. Hier ein kleines Testbeispiel, an welchem die Beleuchtungverhältnisse überschaubar sind: zwei übereinander liegende Quadrate und eine einzige Lichtquelle. Wengistens den Schatten sollte man ja dann sehen.

grafik.nb 25

Page 26: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

v = 880, 0, 0<, 80, 1, 0<, 81, 1, 0<, 81, 0, 0<<;g = Graphics3D@[email protected] RotateRight �� vD, Polygon@vD, Scale@Polygon@vD, .3, 8.5, .5, .3<D<D

p1 = 8"Point", White, 81, 1, 1<<;p2 = 8"Point", White, Scaled@81, 1, 1<D<;p3 = 8"Point", White, ImageScaled@81, 1, 1<D<;d1 = 8"Directional", White, 881, 1, 1<, 80, 0, 0<<<;d2 = 8"Directional", White, Scaled �� 881, 1, 1<, 80, 0, 0<<<;d3 = 8"Directional", White, ImageScaled �� 881, 1, 1<, 80, 0, 0<<<;s1 = 8"Spot", White, 881, 1, 1<, 80, 0, 0<<, 40 °<;s2 = 8"Spot", White, Scaled �� 881, 1, 1<, 80, 0, 0<<, 40 °<;s3 = 8"Spot", White, ImageScaled �� 881, 1, 1<, 80, 0, 0<<, 40 °<;Show@g, Lighting -> 8p1<D

And this are the reults with the version of April 20:p1 − no shadow, location plausible, moving with the picturep2 − no shadow, location plausible, moving with the picturep3 − no shadow, location wrong, moving with the pictured1 − no shadow, location plausible, moving with the pictured2 − no shadow, location plausible, moving with the pictured3 − no shadow, location wrong, moving with the pictures1 − small shadow, location plausible, moving with the pictures2 − no shadow, location not plausible, moving with the pictures3 − no shadow, location wrong, moving with the picture

grafik.nb 26

Page 27: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

à CutOut (Durchsichtige 3D−Objekte)

� Eine erste Lösung

Wir beginnen mit Grafikobjekten, die aus einfachen Primitiven zusammengesetzt sind. Als Startpunkt verwenden wir unseren weiter oben definierten Torus.

GitterComplex@P0_, dx_, dy_, nx_Integer, ny_IntegerD :=GraphicsComplex@Join �� Table@P0 + 8i*dx, j*dy<, 8i, 0, nx<, 8j, 0, ny<D �� Chop,Polygon@Join �� Table@8Hny + 1L i + j + 1, Hny + 1L i + j + 2,

Hny + 1L Hi + 1L + j + 2, Hny + 1L Hi + 1L + j + 1<, 8i, 0, nx - 1<, 8j, 0, ny - 1<DDDGitterComplexPlot@f_, P0_, dx_, dy_, nx_Integer, ny_IntegerD :=With@8gc = GitterComplex@P0, dx, dy, nx, nyD<, GraphicsComplex@f �� gcP1T, gcP2TDD

torusFunction@8t_, u_<, s_, d_D := Module@8r = 8Cos@tD, Sin@tD, 0<, b = 80, 0, 1<<,r + s r*Sin@uD + s b*Cos@uD �� ND

Torus@s_, d_D := GitterComplexPlot@torusFunction@ð, s, dD &, 80, 0<, 2 Pi�d, 2 Pi�d, d, dD

Ein solches GraphicsComplex −Objekt kann mit Normal in eine Liste einfacher Grafikprimitive transformiert werden. Dabei werden alls Abkürzungen aufgelöst, auch die, dass ein Polygon −Objekt mit einer Liste von Listen von Punkten als Liste von Polygon −Objekten interpretiert wird.

Short@[email protected], 10D, 3DShort@t = [email protected], 10D �� Normal, 7DGraphicsComplex@881., 0., 0.3<, 81.17634, 0., 0.242705<,�117�,80.823664, 0., 0.242705<, 81., 0., 0.3<<, Polygon@881, 2, 13, 12<,�99�<DD

88Polygon@881., 0., 0.3<, 81.17634, 0., 0.242705<,80.951675, 0.691433, 0.242705<, 80.809017, 0.587785, 0.3<<D,�98�,

[email protected], -0.484138, 0.242705<, 80.809017, -0.587785, 0.3<,81., 0., 0.3<, 80.823664, 0., 0.242705<<D<<

grafik.nb 27

Page 28: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

torus = Graphics3D@t, Boxed ® FalseD

Ein so normalisierter Torus besteht aus Polygonen mit vier Eckpunkten, woraus das folgende Kommando Polygone mit drei Eckpunkten macht. Damit wird der Torus "durchsichtig".

Clear@p1, p2, p3, p4D;torushohl = torus �.Polygon@8p1_, p2_, p3_, p4_<D ® Polygon@8p1, p2, p3<D

grafik.nb 28

Page 29: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

� CutOut − Löcher in Polygone schneiden

Reguläres Polygon über Punkte in der Gaußschen Zahlenebene als Grafikprimitiv konstruieren.

regularPolygon@n_IntegerD �; n > 0 := Polygon@8Re@ðD, Im@ðD, 0< & ��Table@H-1L^H2 i�nL, 8i, n<D �� ND;

regularPolygon@6D;p = Graphics3D@%, Boxed ® False, ViewPoint -> 80, 0, 1<D

cutout@p_List, Α_D :=Module@8l, q<,q = Map@HH1 - ΑL Mean@pD + Α ðL &, pD;l = Thread@8p, RotateLeft@pD, RotateLeft@qD, q<D;Polygon �� lD

grafik.nb 29

Page 30: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

torus �. Polygon@x_D ® cutout@x, .66D

CutOut@g_Graphics3D, Α_?H0 < ð < 1 &LD := g �. Polygon@x_D ® cutout@x, ΑDliste = 881, 2, 3<, 84, 5, 6<, 83, 2, 1<<;cutout@liste, 0.5D8Polygon@881, 2, 3<, 84, 5, 6<, 83.33333, 4., 4.66667<, 81.83333, 2.5, 3.16667<<D,Polygon@884, 5, 6<, 83, 2, 1<, 82.83333, 2.5, 2.16667<, 83.33333, 4., 4.66667<<D,Polygon@883, 2, 1<, 81, 2, 3<, 81.83333, 2.5, 3.16667<, 82.83333, 2.5, 2.16667<<D<

grafik.nb 30

Page 31: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

q = CutOut@p, 0.5D

Das ist eine sehr simple Version zum Entfernen der Bildkanten, die nur mit einfachen Graphics3D −Objekten funktioniert. Hierzu wird in die Liste a der Grafikprimitive, aus denen das Graphics3D −Objekt aufgebaut ist, an erster Stelle die Grafikdirektive EdgeForm[] eingefügt. Diese bewirkt, dass alle folgenden Grafikprimitive ohne Kanten dargestellt werden.

NoEdges@g_Graphics3DD := g �. Graphics3D@8a__<, b___D -> Graphics3D@8EdgeForm@D, a<, bDtorushohl �� NoEdges

grafik.nb 31

Page 32: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

CutOut@torus, .66D

CutOut@torus, .66D �� NoEdges

� CutOut für komplexe Graphics3D−Objekte

In der neuen Grafik von Mathematica haben die Gitterlinien eines 3D−Objekts nichts mehr mit dessen innerer Struktur zu tun, sondern sind erst in einem zweiten Arbeitsschritt als eindimensionale Linienzüge aufgebracht. Demzufolge muss mehr Aufwand getrieben werden, um auch komplexe Grafikobjekte zu "durchlöchern".

grafik.nb 32

Page 33: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Plot3DBSinB3 "##################x2 + y2 F, 8x, -1, 2<, 8y, -1, 2<F

-1

0

1

2-1

0

1

2

-1.0

-0.5

0.0

0.5

1.0

Als erstes entfernen wir alle Linien, denn sie stören nur.

grafik.nb 33

Page 34: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

p =

Plot3DBSinB3 "##################x2 + y2 F, 8x, -1, 2<, 8y, -1, 2<, Mesh ® None, Boxed ® False, Axes ® FalseF

Short@p �� InputForm, 5DGraphics3D@[email protected], -0.9999997857142857,-0.8916818429467935<, 8-0.7857141020408163, -0.9999997857142857,-0.6238468378008891<, 8-0.5714284183673468, <<2>><, 8<<3>><, <<1284>>, 8<<3>><,8-0.6249998392857141, 1.8392855229591842, -0.4398768503698975<<, <<2>>D, 8<<5>><D

p ist ein Graphics3D −Objekt. Da CutOut neue Stützpunkte generiert, muss diese kompakte Darstellung durch das Kommando Normal erst aufgelöst werden. Die Grafik wird natürlich genauso dargestellt wie die vorherige in ihrer kompakten Darstellung.

grafik.nb 34

Page 35: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

q = p �� Normal

Depth �� 8p, q<811, 12<

ByteCount �� 8p, q<893480, 920944<

Außerdem können Polygon −Objekte nun eine Liste von Optionen haben, was wir beim Anschreiben von cutout und CutOut berücksichtigen müssen. Die modifizierten Versionen haben folgendes Aussehen:

cutout@p_List, Α_, opts___?OptionQD :=Module@8l, q<,q = Map@HH1 - ΑL Mean@pD + Α ðL &, pD;l = Thread@8p, RotateLeft@pD, RotateLeft@qD, q<D;Polygon �� lD

CutOut@g_Graphics3D, Α_?H0 < ð < 1 &LD :=Normal@gD �. Polygon@x_, opts___?OptionQD ® cutout@x, Α, optsD

Nun funktioniert CutOut auch für Plot3D −Ausgaben.

grafik.nb 35

Page 36: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

CutOut@q, 0.7D;Show@%, Lighting -> 8Blue<D

Den Polygon −Objekten ist die Grafikdirektive EdgeForm[] vorangestellt, welche das Zeichnen der Kanten der Polygone vermeidet. Dies kann mit dem folgenden Kommando verändert werden. Auf Grund der adaptiven Größe der Triangulierung ist das Bild aber nicht so eindrucksvoll wie bei einer Triangulierung mit konstanter Netzgröße.

grafik.nb 36

Page 37: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

CutOut@q, 0.4D �. EdgeForm@D ® EdgeForm@[email protected], Black<D;Show@%, Lighting -> 8Yellow<D

à TubePlot3D − Röhrenkurven programmieren

Einige allgemein nützliche Funktionen.

ClearAll@"Global‘*"DTPlen@x_D :=

"######################################################xP1T2 + xP2T2 + xP3T2 ;

TPnorm@x_D := ������������������������x

TPlen@xD �� Together;

� Erste Lösung: Die "mathematische", d.h. analytische über das begleitende Dreibein und ParametricPlot

Clear@TPDreibeinD;TPDreibein@f_?VectorQ, t_SymbolD :=Module@8h, n, b, u<,h = D@f, tD �� TPnorm; H* Haupttangentenvektor *Lu = D@f, t, tD;n = If@u === 80, 0, 0<,If@hP1T === 0, 80, hP3T, -hP2T<, 8hP2T, -hP1T, 0<D, Hu - Hh . uL hLD;

n = n �� TPnorm; H* Normalenvektor *Lb = h�n �� Together; H* Binormalenvektor *L8h, n, b<D

Message gibt Zwischenergebnisse aus. Das ist zum Debuggen der Funktion ebenso sinnvoll wie zur Demonstration, dass die analytische Lösung hier ungeeignet ist. Solche Zwischenausgaben können wie Systeminformationen mit Off abgeschaltet werden.

grafik.nb 37

Page 38: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Clear@TubePlot3DD;TP::msg1 = "f ist ‘1‘";TP::msg2 = "Begleitendes Dreibein ist ‘1‘";TubePlot3D@f_?VectorQ, r_: 0.1, 8t_Symbol, start_, end_<, opts___?OptionQD :=Module@8h, n, b, u<,Message@TP::msg1, fD;8h, n, b< = TPDreibein@f, tD;Message@TP::msg2, 8h, n, b<D;ParametricPlot3D@Evaluate@f + HSin@uD n + Cos@uD bL rD,8t, start, end<, 8u, 0, 2 Π<,opts, Boxed ® False, Axes ® FalseD

D

Einige Beispiele. Der Aufruf mit u statt t klappt auch, dank der lokal deklarierten Variablen in der Funktionsdefinition von TubePlot3D .

TubePlot3D@8u, 0, 0<, 8u, 0, 1<, Boxed -> TrueDTP::msg1 : f ist 8u, 0, 0<TP::msg2 : Begleitendes Dreibein ist 881, 0, 0<, 80, -1, 0<, 80, 0, -1<<

grafik.nb 38

Page 39: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

TubePlot3D@8u, 0, 0<, 8u, 0, 1<, Mesh ® NoneDTP::msg1 : f ist 8u, 0, 0<TP::msg2 : Begleitendes Dreibein ist 881, 0, 0<, 80, -1, 0<, 80, 0, -1<<

Off@TP::msg1D; Off@TP::msg2D;TubePlot3D@8t, 0, 0<, 0.5 + 0.3 Cos@tD, 8t, 0, 4 Π<D

grafik.nb 39

Page 40: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

TubePlot3D@8Sin@tD, Cos@tD, 0<, 0.5, 8t, 0, 2 Π<, PlotPoints ® 2D

TubePlot3D@8Sin@tD, Cos@tD, 0<, 0.5, 8t, 0, 2 Π<, PlotPoints ® 50D

An Wendepunkten der Mittenkurve treten Probleme auf, weil dann in den Koordinatenberechnungen des Dreibeins Ausdrücke der Form ����0

0 entstehen.

Deshalb eine Lücke in der Grafik. Mit Mesh ® All oder Mesh ® None ist alles okay, weil dazu kein extra Netz auf die Figur aufgebracht wird.

grafik.nb 40

Page 41: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

TubePlot3D@8t, Sin@tD, 0<, 0.5, 8t, 0, 2 Π<, Mesh ® AllD

Und hier etwas Code zum Studium des Verhaltens an der Unregelmäßigkeitsstelle.

grafik.nb 41

Page 42: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

u = .05;TubePlot3D@8t, Sin@tD, 0<, .3, 8t, Π - u, Π + u<, Mesh ® AllD

� Zweite Lösung: Die "numerische", welche die Fläche unmittelbar aus Grafikprimitiven erzeugt

TPproject@n_?VectorQ, h_?VectorQD := TPnorm@n - Hh.nL�Hh.hL hD;

Und hier die Definition von TubePlot3D :

grafik.nb 42

Page 43: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Clear@TubePlot3DD;TubePlot3D@func_?VectorQ, radiusfunc_: 0.1,

8var_Symbol, start_, end_<, opts___?OptionQD :=

ModuleB8f, r, pList, hvList, nvList, bvList, rList, pts, u, delta, plotpts, nt, nr<,plotpts = PlotPoints �. 8opts< �. PlotPoints ® 815, 15<;

Switch@plotpts,_List, 8nt, nr< = plotptsP81, 2<T,_, nt = nr = plotptsD;

delta = NB ������������������������������end - start

ntF;

f@t_D := Hfunc �. var ® tL;r@t_D := Hradiusfunc �. var ® tL;pList = Table@f@iD, 8i, start, end, delta<D;hvList = TableBTPnormBfBi + ���������������

delta

100F - fBi - ���������������

delta

100FF,

8i, start, end, delta<F;rList = Table@r@iD, 8i, start, end, delta<D;H* Normalen- und Binormalenvektoren *Lu = 81., 1., 1.<;nvList = Map@Set@u, TPproject@u, ðDD &, hvListD;bvList = MapThread@TPnorm@Cross@ð1, ð2DD &, 8hvList, nvList<D;pts = MapThreadB

TableBð1 + ð2 HSin@uD ð3 + Cos@uD ð4L, :u, 0., 2 Π, ��������2 Π

nr>F &,

8pList, rList, nvList, bvList<F;Graphics3D@Prepend@Table@

With@8v = Join �� ptsP8i, i + 1<, 8j, j + 1<T<,8Polygon@vP81, 2, 3<TD, Polygon@vP82, 3, 4<TD<D,8i, nt<, 8j, nr<D, EdgeForm@DD,DeleteCases@8opts<, PlotPoints ® _D, Boxed ® FalseDF;

H* Ende der Definition von TubePlot3D *L

grafik.nb 43

Page 44: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

� TubePlot3D anwenden

Clear@uDp1 = TubePlot3D@8u, 0, 0<, 8u, 0, 1<D

Durch das Einfügen von EdgeForm[] in die obige Definition werden die Polygone ohne Rand gezeichnet. Mit folgenden Kommandos kann der Rand nachträglich sichtbar gemacht oder auch wieder versteckt werden.

ShowEdges@g_Graphics3DD := g �. EdgeForm@D -> EdgeForm@Thickness@TinyDDNoEdges@g_Graphics3DD := g �. EdgeForm@_D -> EdgeForm@Dp1 �� ShowEdges

grafik.nb 44

Page 45: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

p2 = TubePlot3D@8t, Sin@tD, 0<, 0.5, 8t, 0, 2 Π<D �� ShowEdges

p3 = TubePlot3D@8t, 0, 0<, 0.5 + 0.3 Cos@tD, 8t, 0, 4 Π<D �� ShowEdges

grafik.nb 45

Page 46: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

p4 = TubePlot3D@8Sin@tD, Cos@tD, 0<, 0.5, 8t, 0, 2 Π<, PlotPoints ® 840, 6<D �� ShowEdges

p5 = TubePlot3D@8Sin@tD, Cos@tD, 0<, 0.5, 8t, 0, 2 Π<, PlotPoints ® 86, 40<D �� ShowEdges

grafik.nb 46

Page 47: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

p6 =TubePlot3D@8Sin@tD, Cos@tD, t�10<, 0.5, 8t, 0, 3 Π<, PlotPoints ® 850, 12<D �� ShowEdges

GraphicsGrid@8NoEdges �� 8p1, p2, p3<, NoEdges �� 8p4, p5, p6<<D

grafik.nb 47

Page 48: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

TubePlot3DB:ikjj3 + ���t

2

y{zz Sin@tD, -

ikjj3 + ���

t

2

y{zz Cos@tD, 0>, ������������

1 + t

10, 8t, 0, 4 Π<, PlotPoints ® 830, 12<F

� Titelbild

Auch das Titelbild des Buches wurde mit TubePlot3D erstellt. Hier zunächst die Einzelteile, aus denen der Knoten zusammengesetzt wurde. In der Designphase arbeiten wir mit geringer Auflösung. Wenn alles zu unserer Zufriedenheit ausgefallen ist, werden alle Rechnungen noch einmal mit hoher Auflösung ausgeführt und das endgültige Bild erzeugt. Dazu speichern wir die Auflösung in einer Variablen res , deren Wert über die Option PlotPoints die Auflösung steuert.

f1 = :ikjj1 + ����

t

Π

y{zz Sin@tD, ik

jj1 + ����t

Π

y{zz Cos@tD, 0>;

f2 = :.8 +ikjj1 + ����

t

Π

y{zz Sin@tD, 0, ik

jj1 + ����t

Π

y{zz Cos@tD>;

f3 = :0, 1 +ikjj1 + ����

t

Π

y{zz Sin@tD, 1 +

ikjj1 + ����

t

Π

y{zz Cos@tD>;

res = 820, 15<;p1 = TubePlot3D@f1, .3, 8t, -0.5 Π, 5.2 Π<, PlotPoints ® resD;p2 = TubePlot3D@f2, .3, 8t, -.2 Π, 5.3 Π<, PlotPoints ® resD;p3 = TubePlot3D@f3, .3, 8t, Π �2, 5.7 Π<, PlotPoints ® resD;

Der Knoten ohne Farben. Die Färbung kommt ausschließlich durch die Standardlichtquellen zustande.

grafik.nb 48

Page 49: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Show@8p1, p2, p3<, ViewAngle -> 30 °, Boxed -> True, Axes -> TrueD

-5

0

5

-5

0

5

-5

0

5

Der Knoten mit Eigenfarben.

p1a = p1 �. EdgeForm@D ® Directive@EdgeForm@D, RedD;p2a = p2 �. EdgeForm@D ® Directive@EdgeForm@D, YellowD;p3a = p3 �. EdgeForm@D ® Directive@EdgeForm@D, GreenD;

grafik.nb 49

Page 50: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Show@8p1a, p2a, p3a<, Lighting -> "Neutral", ViewAngle -> 30 °, Boxed -> True, Axes -> TrueD

-5

0

5

-5

0

5

-5

0

5

Mit der aktuellen Version von Mathematica lässt sich das Titelbild des Buches leider nciht erzeugen, weil Schattenwurf generell nicht berücksichtigt wird. Nicht einmal, wenn drei Seitenwände explizit eingezogen werden.

u = 7 881, 1, 1<, 81, 1, -1<, 81, -1, -1<, 81, -1, 1<, 81, 1, 1<<;box = 8Polygon@-uD, Polygon@-RotateLeft �� uD, Polygon@RotateRight �� uD<;gbox = Graphics3D@boxD;sbox = Graphics3D@8Specularity@1D, box<D;

grafik.nb 50

Page 51: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

g1 = Show@8gbox, p1a, p2a, p3a<, Lighting -> "Neutral", Boxed -> FalseD

Das mit dem Spotlicht funktioniert bestens, wenn man einmal davon absieht, dass der runde Lichtkegel geradlinig begrenzte Hell−Dunkel−Bereiche auf den Seitenwänden erzeugt.

grafik.nb 51

Page 52: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

l = 88"Spot", White, 812 81, -1, 1<, 80, 0, 0<<, 20 °<<;g2 = Show@8gbox, p1a, p2a, p3a<, Lighting -> l, Boxed -> FalseD

Auch bei einer punktförmigen Lichtquelle sieht das Bild nicht anders aus. Die diffusen Schatten auf den Seitenwänden stammen nicht von unserem Knoten, sondern sind Reflexe der Lichtquelle selbst, wie ein Bild ohne den Knoten zeigt.

grafik.nb 52

Page 53: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

l = 88"Point", White, 10 81, -1, 1<<<;g3 = Show@8gbox, p1a, p2a, p3a<, Lighting -> l, Boxed -> FalseD

grafik.nb 53

Page 54: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

g4 = Show@8gbox<, Lighting -> l, Boxed -> FalseD

GraphicsGrid@88g1, g2<, 8g3, g4<<D

Das beste, was man derzeit erreichen kann, ist also das folgende Bild.

res = 8150, 25<;p1 = TubePlot3D@f1, .3, 8t, -0.5 Π, 5.2 Π<, PlotPoints ® resD;p2 = TubePlot3D@f2, .3, 8t, -.2 Π, 5.3 Π<, PlotPoints ® resD;p3 = TubePlot3D@f3, .3, 8t, Π �2, 5.7 Π<, PlotPoints ® resD;p1a = p1 �. EdgeForm@D ® Directive@EdgeForm@D, RedD;p2a = p2 �. EdgeForm@D ® Directive@EdgeForm@D, YellowD;p3a = p3 �. EdgeForm@D ® Directive@EdgeForm@D, GreenD;l = 88"Point", White, 10 81, -1, 1<<<;p = Show@8p1a, p2a, p3a<, Lighting -> l, ViewAngle -> 20 °Dp = Show@8p1a, p2a, p3a<, Lighting -> "Neutral", ViewAngle -> 20 °Dp �� ByteCount7076544

grafik.nb 54

Page 55: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

Export in eine gif−Datei mit (standardmäßig) 360x360 Pixeln.

Export@"cover.gif", pDExport@"cover.eps", pD

Und das war das alte Kommando; eine gif−Datei mit 3000x3000 Pixeln

Export@"cover1.gif", p, ImageSize ® 83000, 3000<D;

� TubePlot3D und CutOut

ShowEdges@g_Graphics3DD := g �. EdgeForm@D -> EdgeForm@Thickness@TinyDDNoEdges@g_Graphics3DD := g �. EdgeForm@_D -> EdgeForm@D

p = TubePlot3DB: ����������t3�2

5, -3 Cos@tD, 3 Sin@tD>,

���t

8, 8t, 0.1, 8 Π<, PlotPoints ® 840, 5<F �� ShowEdges

p = TubePlot3DB: ����������t1.5

5, -3 Cos@tD, 3 Sin@tD>, ���

t

8, 8t, 0.1, 8 Π<, PlotPoints ® 880, 20<F;

grafik.nb 55

Page 56: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

l = 88Red, ImageScaled@81, 0, 1<D<, 8Yellow, ImageScaled@81, 1, 1<D<<;q = Show@p, Lighting ® lD

Das folgende Kommando braucht die Definition von CutOut für komplexe Grafikobjekte aus dem Abschnitt "CutOut" dieses Notebooks.

cutout@p_List, Α_, opts___?OptionQD :=Module@8l, q<,q = Map@HH1 - ΑL Mean@pD + Α ðL &, pD;l = Thread@8p, RotateLeft@pD, RotateLeft@qD, q<D;Polygon �� lD

CutOut@g_Graphics3D, Α_?H0 < ð < 1 &LD :=Normal@gD �. Polygon@x_, opts___?OptionQD ® cutout@x, Α, optsD

grafik.nb 56

Page 57: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

CutOut@q, 0.66D

à Weitere Illustrationen

ClearAll@"Global‘*"DTPlen@x_D :=

"######################################################xP1T2 + xP2T2 + xP3T2 ;

TPnorm@x_D := ������������������������x

TPlen@xD �� Together;TPproject@n_?VectorQ, h_?VectorQD := TPnorm@n - Hh.nL�Hh.hL hD;

� Einige Funktionen

Ebene durch P mit Normalenvektor h. Q dient der Ausrichtung des Bildes.

ebene@P_, Q_, h_D := Module@8n, b<,n = Q - P;n = n - Hh.nL�Hh.hL h;b = h�n;Polygon@P + ð & �� 8n, b, -n, -b<DDnormale@h_D :=

-If@hP2T === 0., 8hP3T, 0, -hP1T<, 80, hP3T, -hP2T<D �� TPnorm

Pfeil von P0 nach P1. a1 bestimmt die Länge, a2 die Dicke der Pfeilspitze.

grafik.nb 57

Page 58: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

pfeil@P0_, P1_, a1_, a2_D := Module@8v, n, b, Q, u<,v = P1 - P0;Q = a1 P0 + H1 - a1L P1;n = normale@vD; b = v�n �� TPnorm;b = Table@Q + a2 HSin@uD n + Cos@uD bL, 8u, 0, 2 Π, Π �12<D;Append@Polygon �� Append@Append@ð, P1D & �� Thread@8b, RotateLeft@bD<D, bD, Line@8P0, P1<DDD

� Und nun die Bilder

mk@t_D := 8t, 0, Sin@tD<; H* Mittenkurve *Lcurve = Line@Table@mk@tD, 8t, 0.6, 4.2, .1<DD;t0 = 1.; t1 = 3.;P0 = mk@t0D; h0 = mk’@t0D �� TPnorm; n0 = normale@h0D; b0 = h0�n0;P1 = mk@t1D; h1 = mk’@t1D �� TPnorm; n1 = TPproject@n0, h1D;Graphics3D@[email protected], AbsoluteThickness@2D, curve<,8FaceForm@[email protected], ebene@P0, 80, .5, 0<, h0D<,8FaceForm@[email protected], ebene@P1, 82., .3, 2<, h1D<,8AbsoluteThickness@1D, pfeil@P0, P0 + h0, .3, .05D<,8AbsoluteThickness@1D, pfeil@P0, P0 + n0, .3, .05D<,8AbsoluteThickness@1D, pfeil@P1, P1 + h1, .3, .05D<,[email protected], pfeil@P1, P1 + n1, .3, .05D<,Text@"P0", P0 + 8-.5, .1, .1<D,Text@"P1", P1 + 80, .2, .1<D,Text@"n0", P0 + 8.3, -1.3, .3<D,Text@"h0", P0 + 8.7, .3, .3<D,Text@"n1", P1 + 8-.2, -1.2, .3<D,Text@"h1", P1 + 81.1, -1., 1.4<D<, Boxed ® False, ViewPoint -> 8-1., 4., -6.<,TextStyle ® 8FontSize ® 18<, Lighting ® 8RGBColor@0, 1, 1D<D

P0

P1

n0

h0

n1

h1

grafik.nb 58

Page 59: grafik - IfI: Startseite eine 2D−Grafik erzeugen, mit grünen Flächen sowie kurz−gestrichelten schwarzen Kanten, gesteuert durch geeignete Grafikprimitive. grafik.nb 1 Graphics@8FaceForm@LightBlueD,EdgeForm@8Dotted,Black

P0 = 80, 0, 0<; h = -80, 0, 1.<; n = 83., 1., 7.< �� TPnorm;p = n - Hh.nL�Hh.hL h; p0 = p �� TPnorm;g = Graphics3D@8RGBColor@0., 0., 0.D,8FaceForm@OrangeD, ebene@P0, 81, 1, 1<, hD<,8AbsoluteThickness@1D, pfeil@P0, P0 + h, .2, .03D<,8AbsoluteThickness@1D, pfeil@P0, P0 + n, .2, .03D<,8AbsoluteThickness@1D, pfeil@P0, P0 + p, .3, .03D<,8AbsoluteThickness@1D, pfeil@P0, P0 + p0, .2, .03D<,8AbsoluteDashing@85, 5<D, AbsoluteThickness@1D, Line@8n, p<D<,Text@"h", h + 8-.1, .1, .1<D,Text@"n", n + 8-.1, .1, 0<D,Text@"p", p - 80, .1, .1<D,Text@"p0", p0 - 8.1, .1, .1<D<, Boxed -> False, ViewPoint -> 81., -12., 6.<, Lighting ® 8White<D

h

n

pp0

grafik.nb 59