Cover Preparation for Methods in Medical Informatics
by Jules Berman, Ph.D., M.D.
Author Information
For my latest book,
Methods in Medical Informatics, Fundamentals of
Healthcare Programming in Perl, Python and Ruby,
the excellent and supportive production staff at CRC Press allowed
me to contribute the cover image.
The book consists of algorithms implemented in equivalent Perl,
Python and Ruby scripts. I wanted to provide an image that included
symbols for all three programming languages. I decided to use a
Pov-Ray 3-D image of reflective pearls, floating in an infinite
background of tiled pythons, subdivided by a ruby-red grid.
The image was rendered with Pov-Ray, a free and
open-source application available from:
www.povray.org
The PovRay script that generated the image is shown below.
It's a modification of a basic, and frequently used,
sphere-generator, that
randomly positions spheres
of different sizes throughout the image-scape.
The script uses one external image file:
the head of a morulus python, cut from a photograph taken at the Trieste
Aquarium in Italy, and contributed as a public domain image, now
available at wikimedia.
http://commons.wikimedia.org/wiki/File:Trieste_Acquario_08.jpg
If you've never used PovRay, I hope this web page inspires you to
try your hand at 3-d rendering. Feel free to play around with the
PovRay script provided here, changing the lighting,
the camera positions, the image-plane, and the tiles (in this
case, a snake-head).
Povray script:
global_settings { assumed_gamma 1.0 }
#include "colors.inc"
#include "textures.inc"
// ----------------------------------------
camera {
location <5.0, -12.0, 2.0>
up z sky z
look_at <0.0, 0.0, 0.5>
angle 30
}
sky_sphere {
pigment {
gradient z
color_map {
[0.1 rgb 0.1]
[0.4 rgb 0.4]
}
}
}
light_source {
<3, 1, 2>*20
color rgb <2.2, 1.8, 1.5>
}
light_source {
<3, -1, 2>*20
color rgb <2.2, 1.8, 1.5>
}
// ----------------------------------------
plane {
z,0
texture{
pigment {image_map {png "c:\ftp\pov\snake_pub_bor_red_thin.png"}
scale <1.5 1.55 1.5>} }
}
#macro Sphere(Pos, Radius)
sphere {
<Pos.x, Pos.y, -1 + Radius*3.3>, Radius
texture {pigment{color Red}
finish{
diffuse 0.0
ambient 1.0
specular 0.0
reflection 1.0}}}
#end
#local Cnt=0;
#local Seed=seed(0);
#while (Cnt<3000)
Sphere(
-100+<rand(Seed), rand(Seed)>*250,
0.3+pow(rand(Seed),2)*0.7
)
#local Cnt=Cnt+1;
#end
#macro Sphere(Pos, Radius)
sphere {
<Pos.x, Pos.y, -1 + Radius*3.3>, Radius
texture {
pigment { Red }
finish{
diffuse 0.0
ambient 0.0
specular 0.5
reflection 1.0
}
}
}
#end
#while (Cnt<6000)
Sphere(
-100+<rand(Seed), rand(Seed)>*250,
0.3+pow(rand(Seed),2)*0.7
)
#local Cnt=Cnt+1;
#end