DMUG-Archiv 1998

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Nochmal Punkt in Polygon

Liebe MMA-User,

das von Frank Scherbaum gestellte Problem, zu entscheiden, ob ein Punkt im
Inneren eines Polygons bzw. Polyeders liegt, lässt sich zumindest für Polygone
leicht mit Hilfe der Umlaufzahl  beantworten: 

(1)  Die Umlaufzahl eines Punktes p bezüglich einer geschlossenen Kurve g, wie
in der Funktionentheorie definiert, hilft uns hier sehr gut weiter, ohne dass
Konvexität nötig ist. Die Umlaufzahl einer einfach geschlossenen Kurve ist
2*Pi oder -2*Pi, je nach Orientierung der Kurve, wenn p im Inneren der Kurve
liegt. Liegt p im Äußeren der Kurve, so ist die Umlaufzahl 0. Ein Polygon ohne
Selbstüberschneidung ist ist eine einfach geschlossene Kurve.
(2)  Es folgt nun eine einfache Mathematica-Realisierung der obigen Idee, die
die Argumentfunktion für komplexe Zahlen benutzt:

In[1]:  a:={2,3}; b:={1,5}; c:={-2,1}; d:={-1,-3}; e:={0,-2} 

In[2]:
f[a_,poly_]:=Sum[Arg[((Part[poly,k+1]-a).{1,I})/((Part[poly,k]-a).{1,I})],{k,1
,Length[poly]-1}];
            f[{0,0},{a,b,c,d,e,a}]//N

Out[2]:  6.28319

In[3]:  f[{20,0},{a,b,c,d,e,a}]//N

Out[3]: 0.

In[4]: f[{0,0},{a,e,d,c,b,a}]//N

Out[4]: -6.28319

(3)  Benutzt man nicht die N-Funktion, so erhält man eine Summe von ArcTan-
Werten, die Mathematica nicht ohne Weiteres vereinfachen kann.

(4) Es ist bei dieser Lösung mit der Umlaufszahl auch erlaubt, dass eine
Kurve, bzw. ein Polygon sich überschneidet. Auf diese Weise wird die Ebene in
mehrere einfach zusammenhängende Gebiete unterteilt. Eines dieser Gebiete ist
unbeschränkt und heißt das Äußere der Kurve, bzw. des Polygons. Liegt p nun in
diesem Äußeren des Polygons, dann liefert die von mir mit f bezeichnete
Funktion den Wert 0, liegt p dagegen in einer der beschränkten Komponmenten,
so liefert f je nach Orientierung 2*Pi, bzw. -2*Pi.
Das folgende Beispiel demonstriert diese beiden Fälle: 
In[5]:     f[{0,0},{a,b,e,d,c,a}]//N

Out[5]:  -6.28319

In[6]:      f[{1,1},{a,b,e,d,c,a}]//N

Out[6]:    0.

(5)  Die Idee der Umlaufzahl lässt sich auch auf Polyeder ausweiten, dann muss
man aber mit sphärischen Winkeln arbeiten. Auch da lässt sich auf die
Konvexität verzichten.

Viele Grüße

Stefan Welke


Verweise:
Punkt in Polygon, bzw. Polyeder
Frank Scherbaum, 22.12.1998

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