
Using the kites and darts from part 2, make a 3D surface. Some of the Scene3D code was borrowed from some of the examples that ship with JMP. This JSL was written to make the video clip. Buried in it are some scaling and animation controlling values, tweaked to make the video just right. There is also a path to a directory on the desktop that will be filled with numbered bitmaps. Part 4 will explain how to use other tools outside of JMP to assemble the bitmaps into a video.
This code expects the variables from part 2 to still be in JMP's memory.
scale = 50;//50;
sbscale = .5;//2;//.4;//1;
///////////////// 3D ///////////////////
fn = Function( {x, y},
x /= scale;
y /= scale;
(((1 + Cos( -Pi() + fraction * 2 * Pi() )) / 2) ^ .95) * scale * Sin( 100 * fraction * Pi() + Sqrt( x * x + y * y ) );
); // the function to plot. the sheet color assumes the result is between -1 and +1.
addvertex = Function( {a, b, c},
If(
af < 100, b[3] += Random Normal( 0, If( af <= 0, .1, 1 / Sqrt( 100 * af ) ) ),
af > nframes, b[3] += Random Normal( 0, .01 * Sqrt( af - nframes ) ),
0
);
// calculate the normal; this is the vector cross product of the two lines leaving b to a or c
qx = a[1] - b[1];
qy = a[2] - b[2];
qz = a[3] - b[3];
px = c[1] - b[1];
py = c[2] - b[2];
pz = c[3] - b[3];
nx = py * qz - pz * qy;
ny = pz * qx - px * qz;
nz = px * qy - py * qx;
// normalize the normal vector (sheet<<ENABLE>= nframes, ((nframes - af) / 10) - 15, af <= 0, (af / 10) - 15, -15 ) );
scene << enable( FOG );
scene << fog( FOG_END, 25 ); // fog ends 3 units away, 1 beyond origin
scene << fog( FOG_START, 20 ); // fog begins
scene << fog( FOG_MODE, LINEAR );
changeangle( af );//show(zangle);
scene << Rotate( xangle, 1.0, 0.0, 0.0 ); // spin around the X axis
scene << Rotate( yangle, 0.0, 1.0, 0.0 ); // and the Y axis
scene << Rotate( zangle, 0.0, 0.0, 1.0 ); // and the Z axis
scene << arcball( sheet, 8 );
scene << Update;
Wait( 0 );
// scene << savepicture( picdir || Right( Char( picno++ ), 6, "0" ) || ".png" );
);
</ENABLE>
post pointing to video