DMUG-Archiv 1999

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Re: Restkoerper

> 
> > CSG Operationen mit Polygonalen K"opern sind ziemlich schwer.
> [...]
> > Mathematica unterst"utzt keine K"orper oder die Darstellung von
> > K"orpern. Es gibt als auch keine M"oglichkeit,
> > die Entscheidung ein Punkt, eine Linie oder ein
> > Polygon sind innerhalb eines K"orpers zu treffen.
> 
> OpenGL kennt soweit ich weiss auch keine Koerper, in jedem
> Fall muss man noch einiges an Arbeit investieren.

Nein. Aber nicht-konvexe Polygone. Das Open Geometie B"uchlein
kommt mit einer CD, da sind dann die Quelltexte drauf.
Der C-Quelltext mit der CSG ist im "ubrigen der l"angste und 
komplizierteste. Die meisten besseren 3D CAD Programme beherschen
solche Operationen.

OpenGL 1.2 unterst"utzt Volumentexturen, und das kommt meinem
Verst"andnis von K"orpern ziemlich nahe.

> 
> > Da Mathematica nur Konvexe Polygone Darstellen kann bekommt man
> 
> Genauer gesagt: Mathematica stellt nicht-konvexe Polygone,
> die in drei Dimensionen eingebettet sind, sehr eigenwillig
> dar. (Tom Wickham-Jones gibt in seinem Mathematica Graphics
> Buch eine Erklaerung, warum das so gemacht wird.)

Nicht eigenwillig - falsch !

> 
> > zus"atzlichen
> > "Arger, denn die Schnittk"oper bestehen nicht nur aus konvexen
> > Polygonen.
> 
> Nun ja, so pauschal kann man das wohl nicht sagen, weil jedes
> nicht-konvexe Polygon in konvexe Polygone zerlegt werden kann.

Ja sicher, das ist aber keine gute Idee. 

Also bei einem K"orper der aus Polygonen besteht, zeigen alle Normalen
der Polygone nach aussen. Beim "imKoerper"-Test muss
man testen ob ein Punkt, oder einige Punkte eine Polygons
auf der selben Seite der Polygone liegen, die den K"orper bilden.
Also f"ur einen K"orper mit M Verticies der gegen einen aus N
Polygonen getestet werden soll N * M Vergleiche. Wenn man zu
fr"uh damit beginnt die Polygone in Dreiecke zu splitten 
wird N sehr schnell sehr gross..


> > letztere kann es mit einfachen Mitteln aber in Mathematica nicht geben.
> 
> Ich denke, die Mittel um eine InBodyQ-Funktion fuer
> Polyeder zu schreiben sind in jedem Fall die der
> Computational Geometry, nur dass eine Implementation
> in Mathematica halt langsamer ist als in Compilersprachen.

Ich habe ja nicht gesagt es geht nicht. Im Notfall geht es mit einer
Turing Maschine :-) 

> > Die PolygonIntersections-Option
> > k"ummert sich auch nur um die Sichtbarkeit, die nichts mit
> > der "Innen/Aussen" Entscheidung zu tun hat.
> 
> Nur um die Sichtbarkeit kuemmert sich die RenderAll-Option.
> PolygonIntersections kuemmert sich vor allem um sich
> schneidende Polygone. (Und Schnitte von Polygonen haben,
> glaube ich, schon etwas mit der Innen/Aussen-Entscheidung
> zu tun, aber wahrscheinlich hab ich dich jetzt wieder
> missverstanden. Naja, ist ja auch schon bald Mitternacht. :)

Nein die RenderAll Option schaltet vom Painter zu einem Scanline
Algorithmus um, wenn es gilt die Polygone zu zeichnen. Das "Splitten"
der
Polygone diehnt dazu, sie in eine eindeutige Reihenfolge zu bringen. Nur
Polygone die sich nicht durchdringen k"onnen so sortiert werden, das der
Painter-Algorithmus die verdeckten Kanten beseitigt, wenn man die
Polygone
von hinten nach vorn Zeichnet. Das unangenehme beim
Painter-Algorithmus ist, dass alle Polygone gezeichnet werden, auch
solche die
sp"ater verdeckt sind. Das dauert doppelt so lang und macht sch"one
grosse
PostScript Dateien. Beim Scanline Algoritmus wird von vorn nach hinten
(und unten nach oben)
gezeichnet und eine Horizontlinie mit berechnet. Liegt ein Polygon unter
der Horizontlinie
wird es nich gezeichnet da es verdeckt ist. Splitten muss man die
Polygone
in jedem Fall. PolygonIntersections bestimmt ob man die geteilten
Polygone auch
im Graphics3D Objekt zur"uck bekommt.

Das Teilen der Polygone dient also nur dem Sichtbarkeitstest bz.w. der
Sortierung.

Ok eine einfaches Beispiel nimm mal die Differenz eines W"urfels
Cuboid[{-1,-1,-1},{1,1,1}]
und eines Zylinders in der z-Achse, z in [-1,1] Radius 1/2. Das ergibt
eigentlich
einen durchbohrten W"urfel. Da sich die Fl"achen nicht schneiden b.z.w
zusammen fallen
passiert beim Sichtbarkeitstest garnichts, aus Ober- und Unterfl"ache
des W"urfels
wird auch kein Kreis ausgestanzt. Kurz man sieht keine Bohrung sondern
nur die
Fl"achen des umschliessenden Wurfels. Eine Variante des "inZylinder"
Tests klappt
auch nicht, da die Eckpunkte der W"urfelf"achen ohnehin ausserhalb des
Zylinders
liegen. Auch den Durchschnitt (nur der Zylinder) kannst Du mit Deinem
Test
nicht bilden. Sehen kann man immer nur die Vereinigung der K"orper.

Das Problem besteht einfach darin, dass f"ur die Sichtbarkeit immer nur
einzelne
Polygone miteinader verglichen werden und nicht alle Polygone die zu
einem
K"orper geh"oren.

Es sei  noch angemerkt, das Mathematica sehr sehr schlampig mit der
Orientierung
von Fl"achen umgeht. Da die normale FaceFrom[] nicht zwischen Vorder-
und Hinterseite
eine Polygons unterscheidet sind z. B. im Polyhedra Paket einige der
Polyeder mit
Polygonen versehen die falsch orientiert sind (Octahedron[], 6.
Polygon). 
Die Sphere[] aus Graphics`Shapes ist ebenfalls falsch orientiert und
eigenlich keine
Kugel sondern ein kugelf"ormiges Loch in der Unendlichkeit (das
Begrenzungspolygon der
Unendlichkeit wird selten gezeichnet). Der Zylinder ist kein Zylinder
sondern ein Rohr
daf"ur sind aber die W"ande richtig orientiert.
Noch schlimmer ist es bei ContourPlot3D[] da werden die Polygone 
zuf"allig orientiert und nicht entsprechend des Gradienten der skalaren
Funktion
(es wird auch kein Gradient berechnet). Man bekommt also Fl"achen in
denen je 
nach Lust und Laune mal ein Paar Polygone nach Innen zeigen.

Kurz und schlecht: Mathematica's Graphik verwendet keine K"orper und 
kein Innen und Aussen. Will man damit anfangen muss man erstmal die
Fehler in den Standard Paketen beseitigen. Dann kann man daran gehen 
Polyeder zu definieren die eben *keine* Liste von Polygonen sind 
sondern das Volumen, welches innerhalb der Oberfl"achenpolygone
liegt und die m"oglichst geschlossen sein sollte...

Das wir von den K"orper nur ihre Aussenfl"ache sehen liegt daran,
dass wir keinen R"ontgeblick haben dennoch ist ein K"oper etwas 
anderes als ein Haufen Fl"achen.

Gruss
  Jens


Antworten:
Re: Restkoerper
Martin Kraus, 24.09.1999
Verweise:
Re: Restkoerper
Martin Kraus, 23.09.1999
Re: Restkoerper
Jens-Peer Kuska, 24.09.1999

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

DMUG-Archiv, http://www.mathematica.ch/dmug-liste.html; Letzte Änderung: 08.09.2003 20:45