Re: Parsing polygon lists
- To: mathgroup at smc.vnet.net
- Subject: [mg8993] Re: [mg8963] Parsing polygon lists
- From: Fabian Haas <b5hafa at rz.uni-jena.de>
- Date: Tue, 7 Oct 1997 03:35:40 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Russell Towle <rustybel at foothill.net> wrote: >Hi all, > >I wish to optimize the task of, given a large list of polygons in 3-space, >some of which may fall into coincidence in pairs, to delete any such pairs >from the list. The polygons are lists of vertices, and each vertex is a >list of three real numbers. > >My current method is as follows, using a function "facent" which finds the >centers of polygons: > >1. Find the centers of each polygon in the list 'a': >centfaces =3D Map[ facent[#]&, a];(*no problem here*) > >2. Find the positions in the list of face centers wherein one face center >equals another: >qaz =3D Table[ Position[ centfaces, x_ /; x=3D=3Dcentfaces[[i]] ], {i,= Length[ a >]} ];(*slow*) > >3. Drop the duplicate pairs: >red =3D Flatten[ DeleteCases[ qaz, x_ /; Length[ x ]=3D=3D2] ];(*OK as is*) > >After step (3), I can construct a new list of polygons by writing a[[red]]. > >The main problem is step (2), which is terribly slow. At times the number >of polygons may exceed three or four thousand or more. I am using version >2.2.2. > >Russell Towle >Giant Gap Press: books on California history, digital topographic maps >P.O. Box 141 >Dutch Flat, California 95714 >------------------------------ >Voice: (916) 389-2872 >e-mail: rustybel at foothill.net >------------------------------ Well, I am not sure but you might also try the Complement function, see= details in the reference manual. You might need to remove the Polygon by a replacement rule Polygon[a_] -> a= (rules are generally slower than function) of by a Map[ #[[1]]&,= Polygonlist ] The point is that Complement does not realize that {{a,b,c}, {d,e,f}} is= equal to {{d,e,f}, {a,b,c}} in our sense here, so I added a line that sorts= thinks: list/.If[ a < d, {{a,b,c}, {d,e,f}}, {{d,e,f}, {a,b,c}}]. That works fine for my purposes but I dont know how efficient it works with= 3 to 4000 polygons. You might check that with Timing function. =46abian ------------------------------------------------------------------------- Dipl.Biol. Fabian Haas, MPhil Institut f=FCr Spezielle Zoologie und Evolutionsbiologie Erbertstr. 1 D-07743 Jena b5hafa at pop3.uni-jena.de http://www.zoo.uni-jena.de/~fabian/ Deutschland / Germany TEL ++ 49 3641 630 424 =46AX ++ 49 3641 630 392 :-) (-: -------------------------------------------------------------------------