RE: Speed up ListPlot3D
- To: mathgroup at smc.vnet.net
- Subject: [mg28966] RE: [mg28920] Speed up ListPlot3D
- From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.de>
- Date: Wed, 23 May 2001 01:54:32 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
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