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[ ]