DMUG-Archiv 1999

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Re: Restkoerper

  • From: Martin Kraus <Martin.Kraus@XXXXXXX.de>
  • Organization: Institut fuer Informatik, Universitaet Stuttgart
  • Subject: Re: Restkoerper
  • Date: Fri, 24 Sep 1999 00:02:13 +0200
  • To: dmug@XXXXXXX.ch
Hallo DMUGs,

irgendwie vergesse ich heute immer, eine Kopie an 
dmug zu schicken, deshalb bekommt Jens das hier jetzt
doppelt, genauso wie Ina meine erste Antwort. Sorry. :)

Jens-Peer Kuska wrote:
> 
> Hallo Martin,

Hi Jens!
 
> 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.

> 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.)

> 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.
Alles was man braucht ist also eine Mathematica-Funktion,
die alle nicht-konvexen Polygone in konvexe Polygone zerlegt.
(In Tom Wickham-Jones Buch ist so eine Triangulierungs-Routine
vorgestellt, die allerdings ein paar Nachteile hat. 
Und natuerlich ist soetwas relativ langsam.)

> 
> Selbst wenn man das in Mathematica implementiert wird man nicht viel
> Freude
> daran haben, weil die zahlreichen Tests auf Schnitte (Raytracer
> verwenden
> BSP- oder OctTrees um die Suche zu Optimieren) in Mathematica zu lange
> dauern und man sehr schnell eine Unzahl von Polygonen bekommt.

Stimmt.
 
> Deine inTubeQ[] Funktion versucht die "InK"orperQ[]" Funktion
> nachzubauen,

Genau! :)

> 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.

Aber fuer einfache Koerper, wie Wuerfel, Tori, Zylinder, 
Kegel, etc. kann man solche Funktionen vergleichsweise leicht 
in Mathematica schreiben. (Natuerlich sind diese Funktionen
dann nur Annaeherungen an die Funktionen fuer die eigentlich
Funktionen fuer Polyeder.)

> Schon bei dem Versuch den so erhaltenen K"orper mit einem weiteren
> Zylinder
> zu schneiden klappt das ganze nicht mehr. 

Ich bin mir nicht sicher, was du meinst. 
Jedenfalls sehe ich kein Problem den Koerper mit einem 
weiteren Zylinder zu schneiden (aber wahrscheinlich reden
wir ueber andere Sachen):

wuerfel = 
    Show[Graphics3D[Cuboid[{0.001, 0.001, 0.001}, {4.999, 4.999,
4.999}]]];
rinne = ParametricPlot3D[{Cos[t](2.5 + 0.9 Cos[u]), Sin[t](2.5 + 0.9
Cos[u]), 
      0.9 Sin[u] + 5}, {t, 0, Pi/2}, {u, -Pi, 0}, 
    PlotPoints -> 15]; 
zylinder = 
  ParametricPlot3D[{2.5 + Cos[t], 2.5 + Sin[t], z}, {t, 0, 2 Pi}, {z, 0, 
      5}]; 
gra1 = 
  Show[Graphics3D[{rinne[[1]], wuerfel[[1]], zylinder[[1]]}, 
      PolygonIntersections -> False]]; 
Show[gra1]; 
center[pointList_] := Plus @@ pointList/Length[pointList];
distance[p1_, p2_] := Sqrt[(p1 - p2).(p1 - p2)];
normalized[p1_] := p1/Sqrt[p1.p1];
inTubeQ[{x_, y_, z_}] := 
  If[distance[{x, y, z}, 2.5 normalized[{x, y, 0}] + {0, 0, 5}] < 0.89,
True, 
    False]; 
inCylinderQ[{x_, y_, z_}] := 
  If[distance[{x, y, 0}, {2.5, 2.5, 0}] < 0.95, True, False]; 
gra2 = 
  DeleteCases[
    gra1, (Polygon | Line)[
        points_, ___] /; (inTubeQ[center[points]] || 
          inCylinderQ[center[points]]), Infinity]; 
Show[gra2, Boxed -> False];

> 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. :) 

> 
> Gruss
>   Jens
> 

Gruesse und gleich guten Morgen 

Martin Kraus



Verweise:
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