Re: Triangle List <-> Adjacency List
- To: mathgroup at smc.vnet.net
- Subject: [mg30507] Re: [mg30466] Triangle List <-> Adjacency List
- From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
- Date: Fri, 24 Aug 2001 04:06:09 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Here are a couple of quick attempts. However, I have not tested them on
anything but your example, so there may be a bug (I am pretty sure that
the first function, which is the one you seem to care more about is
O.K.):
TrianglesToAdj[l_List] :=
Module[{Side, sides, vertices = Union[Flatten[l]], adj},
SetAttributes[Side, Orderless];
sides = Union[
Side @@@ Flatten[Map[Partition[Append[#, First[#]], 2, 1] &, l],
1]];
adj[x_] := Cases[sides, Side[a_, x] -> a, Infinity]; Map[adj,
vertices]]
AdjToTriangles[adj_List] :=
Module[{verts = Union[Flatten[adj]], sides, Side},
SetAttributes[Side, Orderless];
sides = Union[
Side @@@
Flatten[Distribute[#, List] & /@ Transpose[{verts, adj}], 1]];
ReplaceList[
sides, {___, Side[i_, j_], ___, Side[i_, k_], ___,
Side[j_, k_], ___} -> {i, j, k}]]
In your case they work fine:
In[3]:=
tlist={{0,2,1},{1,2,3}};
In[4]:=
ad=TrianglesToAdj[tlist]
Out[4]=
{{1,2},{0,2,3},{0,1,3},{1,2}}
In[5]:=
AdjToTriangles[ad]
Out[5]=
{{0,1,2},{1,2,3}}
On Thursday, August 23, 2001, at 03:15 PM, Kashif Rasul wrote:
> Hi there,
>
> I was wondering if anyone knows of a quick way of converting a list of
> triangle corners, eg. for a triangulation like:
>
> 0 1
> o------o
> | /|
> | / |
> | / |
> | / |
> | / |
> | / |
> |/ |
> o------o
> 2 3
>
> the triangle list will be {{0,2,1},{1,2,3}}, i.e. the first triangle's
> first corner is at index [1], followed by its other two corners in
> counterclockwise order etc.; into a list which represents the adjacency
> structure of the graph, e.g. for the above triangulation, it will be:
> {{1,2},{0,2,3},{0,1,3},{1,2}}, node 0 is conected to node 1 and 2, etc.
>
> Also it might be helpfull to go the other way too from an adjacency list
> to a triangle list.
>
> Thank you in advance.
>
> Kashif
>
>
>
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/