Re: DelaunayTriangulation[] output
- To: mathgroup at smc.vnet.net
- Subject: [mg83231] Re: DelaunayTriangulation[] output
- From: "Steve Luttrell" <steve at _removemefirst_luttrell.org.uk>
- Date: Thu, 15 Nov 2007 05:45:50 -0500 (EST)
- References: <fhegn1$m6p$1@smc.vnet.net>
Here is one way of doing approximately what you want based on the
documentation for the Computational Geometry Package.
Set up the package and an example set of data.
<< ComputationalGeometry`
data2D={{4.4,14},{6.7,15.25},{6.9,12.8},{2.1,11.1},{9.5,14.9},{13.2,11.9},{10.3,12.3},{6.8,9.5},{3.3,7.7},{0.6,5.1},{5.3,2.4},{8.45,4.7},{11.5,9.6},{13.8,7.3},{12.9,3.1},{11,1.1}};
delval=DelaunayTriangulation[data2D];
Here is my quick and dirty extraction of triangles. I take each adjacency
list and partition it into overlapping pairs, then prepend the reference
node to form a triple, then sort the resulting triple (in preparation for
the Union later), then flatten all these triples into a flat list of
triples, then do a Union to eliminate common triples, leaving you with a
list of triples that are the triangles that you wanted.
triangles=Flatten[Map[MapThread[(Prepend[#2,#1]//Sort)&,{Table[#[[1]],{Length[#[[2]]]}],Partition[#[[2]],2,1,{1,1}]}]&,delval],1]//Union
Compare the graphics in the following two outputs:
PlanarGraphPlot[data2D]
Graphics[GraphicsComplex[data2D,Line[triangles]]]
You see that the results are nearly the same except at the boundary. I hope
this gets you near to what you wanted.
Steve Luttrell
West Malvern
"Dominick" <pd20012000 at yahoo.com> wrote in message
news:fhegn1$m6p$1 at smc.vnet.net...
> Hi guys I was wondering if you could help me with a
> couple of problems im having. I'm writing a program
> that when given two images it creates a morph in between them.The
> algorithm im implementing uses control points i choose on the image and
> them triangulates the the images using those control points.I then use the
> subsquent triangles to create a 1 to 1 correspondance between the 2
> images. Im using the DelaunayTriangulation[] command to do the
> triangulation for me.Well my problem is the output of
> DelaunayTriangulation. I need a triangle list ie;
>
>
> i j k
> 1 5 2
> 2 3 7
> . . .
>
>
> where i,j,k are the vertices of the triangle
> but DelaunayTriangulation outputs an adjacency list ie
>
>
>
> { {i,{points that are connected to i},..}
>
>
> I was wondering if anyone knew how to convert this list to the triangle
> based list i need.If i get this figured out then 90%+ of the program is
> done.I appreciate any help.
>