Re: Region for ListPlot3D
- To: mathgroup at smc.vnet.net
- Subject: [mg88728] Re: Region for ListPlot3D
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Wed, 14 May 2008 06:05:59 -0400 (EDT)
- Organization: University of Bergen
- References: <g0bt4i$o42$1@smc.vnet.net>
Hugh Goyder wrote: > Below I give a set of 3D points and attempt to plot them as a surface > using ListPlot3D. I also plot the points directly using Graphics3D. > The data fill a region that is approximately a trapezium except that > one side is concave. ListPlot3D extrapolates the concave side out to > the convex hull of the x -y coordinates thus giving a false impression > of the surface. How can I make the plotting region conform to the data > and exclude the extrapolation? > I just noticed that you have a regular matrix of 3D points. What you really need is not ListPlot3D, but a "ListParametricPlot3D", that AFAIK does not exist. So here's a very simple implementation: listParametricPlot3D[points_, opt___?OptionQ] := Module[{xx, yy}, {yy, xx} = Take[Dimensions[points], 2]; Graphics3D[GraphicsComplex[Join @@ points, Polygon[ Join @@ Table[{1 + i + xx j, 2 + i + xx j, 2 + i + xx (j + 1), 1 + i + xx (j + 1)}, {j, 0, yy - 2}, {i, 0, xx - 2}] ]], opt] ] Fancy stuff like VertexNormals or interpolation is not handled. listParametricPlot3D[pp] will create the plot you're looking for. Here's another example: listParametricPlot3D[ Table[{Cos[u] Cos[v], Cos[u] Sin[v], Sin[u]}, {u, -Pi/2, Pi/2, Pi/14}, {v, 0, 2 Pi, 2 Pi/28}], Boxed -> False, SphericalRegion -> True ] > > pp = {{{0, 0, 0}, {5, 0, 0}, > {10, 0, 0}, {14, 0, 0}, > {19, 0, 0}, {24, 0, 0}, > {29, 0, 0}, {33, 0, 0}, > {38, 0, 0}, {43, 0, 0}, > {48, 0, 0}}, > {{0, 53, 3}, {5, 53, 3}, > {10, 53, 3}, {14, 53, > 3}, {19, 53, 3}, > {24, 53, 3}, {29, 53, > 3}, {33, 53, 3}, > {38, 53, 3}, {43, 53, > 3}, {48, 53, 3}}, > {{0, 107, 18}, {5, 107, > 19}, {10, 107, 19}, > {14, 107, 19}, > {19, 107, 19}, > {24, 107, 18}, > {29, 107, 18}, > {33, 107, 18}, > {38, 107, 18}, > {43, 107, 18}, > {48, 107, 18}}, > {{0, 160, 81}, {5, 160, > 81}, {10, 160, 81}, > {15, 160, 80}, > {20, 160, 80}, > {25, 160, 80}, > {30, 160, 80}, > {35, 160, 79}, > {40, 160, 79}, > {45, 160, 79}, > {50, 160, 79}}, > {{0, 213, 142}, > {6, 213, 142}, > {12, 213, 141}, > {18, 213, 141}, > {25, 213, 140}, > {31, 213, 140}, > {37, 213, 140}, > {43, 213, 139}, > {49, 213, 139}, > {56, 213, 138}, > {62, 213, 138}}, > {{0, 267, 93}, {9, 267, > 93}, {18, 267, 93}, > {27, 267, 93}, > {36, 267, 93}, > {45, 267, 93}, > {54, 267, 92}, > {63, 267, 92}, > {72, 267, 91}, > {82, 267, 91}, > {91, 267, 90}}, > {{0, 320, 60}, {13, 320, > 60}, {26, 320, 60}, > {40, 320, 60}, > {53, 320, 59}, > {66, 320, 59}, > {79, 320, 58}, > {92, 320, 58}, > {105, 320, 58}, > {118, 320, 58}, > {132, 320, 57}}, > {{0, 373, 40}, {18, 373, > 40}, {36, 373, 40}, > {54, 373, 40}, > {72, 373, 40}, > {90, 373, 40}, > {108, 373, 40}, > {126, 373, 40}, > {144, 373, 40}, > {162, 373, 40}, > {180, 373, 40}}, > {{0, 427, 29}, {23, 427, > 29}, {47, 427, 29}, > {70, 427, 29}, > {93, 427, 29}, > {116, 427, 29}, > {140, 427, 29}, > {163, 427, 28}, > {186, 427, 28}, > {210, 427, 28}, > {233, 427, 28}}, > {{0, 480, 22}, {29, 480, > 22}, {58, 480, 22}, > {87, 480, 22}, > {116, 480, 22}, > {145, 480, 22}, > {174, 480, 22}, > {203, 480, 22}, > {232, 480, 22}, > {260, 480, 22}, > {289, 480, 22}}, > {{0, 533, 17}, {35, 533, > 17}, {70, 533, 17}, > {104, 533, 17}, > {139, 533, 17}, > {174, 533, 17}, > {209, 533, 17}, > {244, 533, 17}, > {278, 533, 17}, > {313, 533, 17}, > {348, 533, 17}}};