From: Rafael L. <rla...@us...> - 2004-05-03 09:05:36
|
Update of /cvsroot/plplot/plplot/examples/perl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv519 Modified Files: x18.pl Log Message: Implemented example x18 in PerlDL Index: x18.pl =================================================================== RCS file: /cvsroot/plplot/plplot/examples/perl/x18.pl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- x18.pl 2 May 2004 14:26:04 -0000 1.1 +++ x18.pl 3 May 2004 09:05:27 -0000 1.2 @@ -22,4 +22,112 @@ # along with PLplot; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -die "Demo $0 not yet implemented in PerlDL.\n"; +use PDL; +use PDL::Graphics::PLplot; +use Math::Trig qw [pi]; + +my @opt = (1, 0, 1, 0); +my @alt = (20.0, 35.0, 50.0, 65.0); +my @az = (30.0, 40.0, 50.0, 60.0); + +sub test_poly { + my $k = shift; + + my $draw = pdl ([ 1, 1, 1, 1 ], + [ 1, 0, 1, 0 ], + [ 0, 1, 0, 1 ], + [ 1, 1, 0, 0 ]); + + my $two_pi = 2 * pi; + + pladv (0); + plvpor (0.0, 1.0, 0.0, 0.9); + plwind (-1.0, 1.0, -0.9, 1.1); + plcol0 (1); + plw3d (1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, $alt[$k], $az[$k]); + plbox3 (0.0, 0, 0.0, 0, 0.0, 0, + "bnstu", "x axis", "bnstu", "y axis", "bcdmnstuv", "z axis"); + + plcol0 (2); + +# x = r sin(phi) cos(theta) +# y = r sin(phi) sin(theta) +# z = r cos(phi) +# r = 1 :=) + +print $draw[0]; + + for (my $i = 0; $i < 20; $i++ ) { + my $theta = $two_pi * ($i + pdl [0, 0, 1, 1, 0]) / 20.; + for (my $j = 0; $j < 20; $j++ ) { + my $phi = pi * ($j + pdl [0, 1, 1, 0, 0]) / 20.1; + my $x = sin ($phi) * cos ($theta); + my $y = sin ($phi) * sin ($theta); + my $z = cos ($phi); + + plpoly3 ($x, $y, $z, $draw->slice(",$k")->squeeze, 1); + } + } + + plcol0 (3); + plmtex (1.0, 0.5, 0.5, "t", "unit radius sphere"); + +} + +#-------------------------------------------------------------------------- +# main + +# Does a series of 3-d plots for a given data set, with different +# viewing options in each plot. +#-------------------------------------------------------------------------- + +use constant NPTS => 1000; + +# Parse and process command line arguments + +plParseOpts (\@ARGV, PL_PARSE_SKIP | PL_PARSE_NOPROGRAM); + +# Initialize plplot + +plinit (); + +for (my $k = 0; $k < 4; $k++) { + test_poly ($k); +} + +# From the mind of a sick and twisted physicist... + +my $i = sequence (NPTS); +my $z = -1. + 2. * $i / NPTS; + +# Pick one ... + +my $r = $z; + +my $x = $r * cos (2 * pi * 6 * $i / NPTS); +my $y = $r * sin (2 * pi * 6 * $i / NPTS ); + +for ($k = 0; $k < 4; $k++) { + pladv (0); + plvpor (0.0, 1.0, 0.0, 0.9); + plwind (-1.0, 1.0, -0.9, 1.1); + plcol0 (1); + plw3d (1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, $alt[$k], $az[$k]); + plbox3 (0.0, 0, 0.0, 0, 0.0, 0, + "bnstu", "x axis", "bnstu", "y axis", "bcdmnstuv", "z axis"); + + plcol0 (2); + + if ($opt[$k]) { + plline3 ($x, $y, $z); + } else { + plpoin3 ($x, $y, $z, 1); + } + + plcol0 (3); + $title = sprintf ("#frPLplot Example 18 - Alt=%.0f, Az=%.0f", + $alt[$k], $az[$k]); + plmtex (1.0, 0.5, 0.5, "t", title); +} + +plend (); |