DMUG-Archiv 2010

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Re: AW: Sortieren von geschlossenen Konturen

  • From: Patrick Scheibe <patrick@XXXXXXX.de>
  • Subject: Re: AW: Sortieren von geschlossenen Konturen
  • Date: Tue, 27 Jul 2010 00:02:28 +0200
  • To: Stefan Fuhrer <stefan.fuhrer@XXXXXXX.com>
  • Cc: "'Mathematica User Group Group'" <demug@XXXXXXX.ch>
  • Authentication-results: www.mathematica.ch; dkim=neutral (verification failed) header.i=@XXXXXXX.de
  • Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; t=1280181837; l=2433; s=domk; d=yoursort.de; h=Content-Transfer-Encoding:Mime-Version:Date:Content-Type:References: In-Reply-To:Cc:To:From:Subject:X-RZG-CLASS-ID:X-RZG-AUTH; bh=ks/3hLKpIqM96TKl4CZIKhZ//8I=; b=ooG1Ad4SnZME2i82mczeKxGwCOEP9pTHjE4vOfOepnff1qp6ojLpwKPqvqaP3QxzVzx cH0bchgro7+5tbb9G021jxhbkAcWYQ1YEAOaRWy0RtAokSSdsQh3tCSE1rbLZhFkHpMiv fW0CTbGaBGmuekLZIdIb4RGvbGQil5ago0s=
Moin,

nehmen wir an du hast eine wilde Liste mit solchen Punktpaaren, die
jeweils ein Liniensegment darstellen und du weisst, dass die Punkte
einen Zyklus bilden. Sie sind eben nur nicht sortiert:

points = RandomSample[#, 
    Length[#]] &[{{20 Sin[#1], 20 Cos[#1]}, {20 Sin[#2], 
      20 Cos[#2]}} & @@@ 
   Partition[Table[N@Mod[phi, 2 Pi], {phi, 0, 2 Pi, Pi/10}], 2, 1]]
ListPlot[points, AspectRatio -> Automatic]

Dann koennte man doch zuerst mal die Punkte "eindeutig" umbenennen. Bei
den Liniensegmenten gibt es ja immer 2 wo bei dem einen ein Punkt am
Ende genau der Anfangspunkt des anderen Liniensegments ist. Diese Punkte
kriegen dann die selbe ID:

renameRule = (Thread[# -> Range[Length[#]]] &@
    DeleteDuplicates[Flatten[points, 1]]);
unsrtEdges = points /. renameRule

Dabei eraehaelt man dann sowas der Art {{1, 2}, {3, 4}, {5, 6}, {7, 8},
{9, 5}, {10, 11}, {2, 12},... wobei die Zahlen die IDs der Punkte sind.
Tja und dann haette ich an sowas wie

<< Combinatorica`
g = FromUnorderedPairs[unsrtEdges];
cycl=FindCycle[g]
Graphics[Line[cycl /. (Reverse /@ renameRule)]]

gedacht. Funktioniert bei mir auch bei 1000 Liniensegmenten innerhalb
von Sekunden. Wenn du mehrere Zyklen drin hast, dann schau dir die
Funktion ExtractCycles an, die gibt dir alle moeglichen Zyklen aus.
Ich hoffe das gibt dir einen Ansatzpunkt,

Cheers
Patrick



On Mon, 2010-07-26 at 17:16 +0200, Stefan Fuhrer wrote:
> Es wurde nicht der ganze Eintrag abgedruckt. Hier der fehlende Teil.
> 
> Der komplette Datensatz selbst {Liniensegment 1, Liniensegment 2....}.
> 
> Gestern Abend habe ich folgenden Lösungsansatz versucht, welcher aber noch
> nicht ausgereift ist.
> Ich probiere folgendes: Es werden bereits die Triangel Kante an Kante
> (welche in der Schnittebene enthalten sind) sotiert. Dies realisiere ich mit
> folgenden Code, welcher ich in ähnlicher weise hier im Forum gefunden habe:
> 
> side3D[{a_, b_, c_}] := {{a, b, c}, {a, c, b}, {b, a, c}, {b, c, 
>    a}, {c, a, b}, {c, b, a}}
> 
> SortPolygones[T_] := Module[{edge, data, ii},
>   edge = Flatten[Map[side3D, T], 1];
>   data = Union[Map[Sort, edge]];
>   ii = Dimensions[data][[1]];
>   Table[Polygon[data[[i]]], {i, 1, ii}]
>   ]
> 
> T ist der komplette Datensatz. Leider habe ich noch keinen Ansatz wie ich
> das Problem lösen kann wenn mehrere Konturen in dem Datensatz vorhanden
> sind.
> 
> Besten Dank
> Grues Stefan
> 
> 

Verweise:
Sortieren von geschlossenen Konturen
Stefan Fuhrer, 25.07.2010
Re: Sortieren von geschlossenen Konturen
klamser, 26.07.2010
AW: Sortieren von geschlossenen Konturen
Stefan Fuhrer, 26.07.2010

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

DMUG-Archiv, http://www.mathematica.ch/dmug-liste.html; Letzte Änderung: 27.07.2010 08:54