# Re: animation of coloured points on a surface graphics?

```Heiko Appel wrote:
>
> I tried to plot coloured points on a surface graphics. My first attempt
> looked like this:
>
> ---------------------------------------------------------------------------
> <<Graphics`Graphics3D`   (* for ScatterPlot3D   *)
>
> (* Definition of a function *)
> f[x_,y_]:= -x Sin[Sqrt[Abs[x]]] -y Sin[Sqrt[Abs[y]]]
>
> (* Plot of this function *)
> p1:=Plot3D[f[x,y],{x,-500,500},{y,-500,500},PlotPoints->50]
>
> (* 100 random points on this surface *)
> mypoints:=Table[{a=Random[Real,500],b=Random[Real,500],f[a,b]},{x,0,100}]
>
> (* plot of the points *)
> p2:=ScatterPlot3D[mypoints]
>
> (* plot of points and surface *)
> plot:=Show[p1,p2]
>
> ---------------------------------------------------------------------------
>
> But now I don't know how to give mypoints a color (e.g. red) or how to
> show them in a bigger fashion?????
> In the next step I want to animate different sets of points on the
> surface p1; e.g in this way:
>
>  for i=1 to 100 do
>   ..
>   mypoints_new = move[mypoints]      (* here is move a self defined
> function
>                                         which changes the coordinates of
> the
>                                         points slightly *)
>   p2:=ScatterPlot3D[mypoints_new]
>   ..
>   Show[p1,p2]
>
>
> This gives in every step a plot of the changed points but also the
> surface (which has not changed!) is drawn again. And it's no real
> animation, only a sequence of pictures!
> Is there a way to program an animation in only one X-Window and how can
> I accelerate the calculation?????
>
>                                         Heiko    :-)

Heiko,

Some suggestions for the first part.

(*make graphics obect for surface - don't show it (DisplayFunction ->
Identity) Note =, not :=.
The surface is computed here - not every time that pl is used *)
p1=Plot3D[f[x,y],{x,-500,500},{y,-500,500},PlotPoints->50,
DisplayFunction -> Identity];

(* 100 random points on this surface  Note: use of pure function; I've
left := so that new points are generated each time mypoints is used -
you could store one version for comparison *)

mypoints:=Table[
Point[{#1,#2, f[#1,#2]}]&[Random[Real,500],Random[Real,500]],{100}];

(* make points into Graphics3D object with specified color and size.
Using ScatterPlot3d the size and color can be specified by the option
PlotStyle ->{Hue[0],PointSize[0.02]}*)

p2 = Graphics3D[{Hue[0],PointSize[0.02],mypoints}];

(* plot points and surface - turn display back on (DisplayFunction ->
\$DisplayFunction) *)
plot=Show[p1,p2, DisplayFunction -> \$DisplayFunction]

--
Allan Hayes
Training and Consulting
Leicester, UK
hay@haystack.demon.co.uk
http://www.haystack.demon.co.uk
voice: +44 (0)116 271 4198
fax: +44 (0)116 271 8642

```

• Prev by Date: Re: RE-GROUPING OF EXPRESSIONS
• Next by Date: Re: Calculus`FourierTransform`
• Prev by thread: Re: Data Extraction from List {{x1,y1}..{xn,yn}}where ##<x<##
• Next by thread: Re: How I can calculate a surface of a points list?