NetPlot3D[]
- To: mathgroup at yoda.physics.unc.edu
- Subject: NetPlot3D[]
- From: rar at mail.physics.utah.edu (rudolph a romer)
- Date: Mon, 14 Sep 1992 15:51:48 -0600
mathgroup: The following piece of MMA code may help solve a recently posted problem with ListPlot3D[]: Since ListPlot3D[] only accepts a list of height values in standard matrix format (that is the data points are assumed to lie on a regular rectangular grid), a general list of data points of the form {{x1,y1,z2},{x2,y2,z2},...} can not be displayed via ListPlot3D[]. I ran into this problem sometime ago while working on random triangulations for the shape-from-shading problem. The following MMA-package still assumes that the (x,y)-pairs lie on a lattice, but the lattice points may very in their elementary cell dimensions. I hope that posting this package might help in developing a more general solution to this problem. -Rudo ########################################################################### # Rudolf A. Roemer (RAR) Room: 306 James Fletcher Building # # Department of Physics Email: rar at mail.physics.utah.edu # # University of Utah roemer at dec1.physik.fu-berlin.de # # Salt Lake City, Utah 84112 FAX: USA (801) 581 4801 # # USA Phone: USA (801) 581 6424 # # USA (801) 596 1527 (home) # ########################################################################### -----Cut here ----- (***************************************************************** * * N E T * * A Mathematica program for displaying nets * *****************************************************************) (***************************************************************** * * File: Net.m * * 260591 RAR: NetPlot3D[] can handle lists of different xy sizes * 030591 RAR: installation * *****************************************************************) (***************************************************************** * * Setting up the context * *****************************************************************) BeginPackage[ "Net`", "FilterOptions`" ] (***************************************************************** * * Usage messages * *****************************************************************) Net::usage = "Net.m is an extension of the usual ListPlot functions for arrays that do not follow the usual grid format." NetPlot::usage = "NetPlot[{{x1,y1},{x2,y2} ..}, opts] plots a net with vertices at the given coordinates." NetPlot3D::usage = "NetPlot3D[{{x1,y1,z1},{x2,y2,z2} ..}, opts] plots a net with vertices at the given coordinates in 3D. The x and y coordinates are optional." (***************************************************************** * * Setting up the `private` context * *****************************************************************) Begin["`private`"] NetPlot[coords_List, opts___Rule]:= Show[ Graphics[ Join[ Map[ Line, Transpose[coords] ], Map[ Line, coords ] ] ], AspectRatio->Automatic, FilterOptions[Graphics, opts] ] NetPlot3D[l3:{{{_, _, _}..}..}, opts___Rule]:= Show[ Graphics3D[ Table[ Polygon[ { l3[[i]][[j]], l3[[i+1]][[j]], l3[[i]][[j+1]], l3[[i+1]][[j+1]] } ], {i,Length[l3]-1}, {j, Length[l3[[i]]]-1} ] ], FilterOptions[Graphics, opts], BoxRatios->{1,1,.4} ] NetPlot3D[l1:{{_..}..}, opts___Rule]:= Block[{i,j}, NetPlot3D[ Table[ {i, j, l1[[i]][[j]]}, {i, Length[ l1 ]}, {j, Length[ l1[[i]] ]} ], opts ] ] (***************************************************************** * * End the `private` context * *****************************************************************) End[ ] (***************************************************************** * * Protect exported symbols * *****************************************************************) Protect[ NetPlot, NetPlot3D ]; (***************************************************************** * * End the package * *****************************************************************) EndPackage[ ]