For my comment please see below:
> -----Original Message-----
> From: maxao [mailto:maxao at aol.com]
To: mathgroup at smc.vnet.net
> Sent: Friday, May 18, 2001 7:13 AM
> To: mathgroup at smc.vnet.net
> Subject: [mg28966] [mg28920] Speed up ListPlot3D
>
>
> Hi Experts,
>
> I work up about 25000 datas of one surface. To show these
> datas {x,y,z} I
> use a package of the following book:
> "Mathematica Graphics: Techniques and Applications"
> TELOS/Springer-Verlag Publishers, 1994
> ISBN 0-387-94047-2
>
> To load this package...
>
> Needs["ExtendGraphics`SurfaceGraphics3D`"];
>
> and to show the Surfaceplot...
> ListSurfacePlot3D[xyAsti];
>
> xyAsti is a List of Datas of this kind:
>
> xyAsti={{x1,y1,z1},{x2,y2,z2},...}
>
> To show this Graphic the computer needs a long time.
>
> My question:
> Is there any wah to speed up this kind of plot or to speed up
> generally
> ListPlot3D? With what precision does Mathematics 4.0
> calculates thes Plots?
> Can I reduce this precision in any way? To reduce the datas
> make me loos
> informations about the surface!!!
> Probably anybody can give me advice!?
>
> Thank you,
>
> Martin
>
>
>
Martin,
the performance is hit -- I believe -- by the triangulation (within
SurfaceListPlot3D) of such many points. TWJ has given binary code (for
various platforms) and I assume that you do use it.
So let's focus on this part.
(1) first of all, you should judge whether you really need that
triangulation. If your points are on a regular (not neccessary evenly
spaced) grid you may proceed differently. See my recent answer to "ListPlot
vs. ListPlot3d"
Even when a few points were missing on the grid, you might add those with
some z value and finally "repair" the resulting graphics (dropping those
points and joining the Polygons in the vicinity.
(2) you could try to get some better performing algorithm for triangulation.
This certainly would be the really hard work. Perhaps before doing so, you
first would like to measure the performance of SurfaceListPlot3D as a
function of the number of points.
As far as I know, TWJ uses Delaunay-triangulation. Perhaps you may be better
off with some simpler (but more arbitrary and perhaps less pleasing)
triangulation.
Scanning published or commercial C and C++ libraries you possibly might find
some more effective triangulations for your size, or calculations accepting
some directives you may tune to your problem. E.g. you might have a look
into http://www.mpi-sb.mpg.de/LEDA/leda.html (A Platform of Combinatorial
and Geometric Computing)which is from Kurt Mehlhorn and St. Naeher from the
Max Planck Institute for Computer Science at Saarbruecken.
(3) After having measured the complexity of TWJ' algorithm, it might be
senseful to apply a divide and conquer strategy. Two ideas for that:
(a) divide the xy-plane (i.e. your point set) into patches. Plot each patch,
and then combine the patches. The problem of course is to "sew the
borders".
(b) select (i.e. by chance) a significant subset of your points, triangulate
them, and then add the missing points. So you have to triangulate only a few
points (which hit a triangle) _within_ that triangle. Again this is not
Delaunay, but will not be disturbing to the eye (I guess).
(4) You did not tell how you got your data. Perhaps you may influence that
process and get better probes (i.e. on a grid). Perhaps you may get them
"nearly" on a grid, then you may shift each point to the point next on the
grid, create the SurfaceGraphics object with ListPlot3D, convert it to
Graphics3D and then shift back each point to its poper location. This
effectively means that you use a regular "quatroangulation" of the plane.
(5) If your points make up contours, then you can triangulate them very fast
(in linear time).
(6) Choose a different presentation: that a graph with a reduced number of
points would be useless is hard to believe. Perhaps you can present it
anyways, then offer some "zoom-in" into smaller regions with separate plots,
which contain all the points (locally).
Hope this will help somewhat -- Hartmut