DNA Double Helix

http://www.srcf.ucam.org/~jrk33/pov/DNA.png

//  Deoxyribose Nucleic Acid molecule

//  James Kermode, October 1999
//  Scale: 1 unit = 1 ångström (1e-10 m)


// I N C L U D E S ////////////////////////////////////////////////////////////

#include "colors.inc"

// D E C L A R E S ////////////////////////////////////////////////////////////

#declare GeneticSeed = 52;
#declare RandSeed = seed(GeneticSeed);

#declare Helix = union
{
  #declare Angle = 0;
  
  #while (Angle<360)
    #declare StartPt=vrotate(10*x,-y*Angle)+y*34*(Angle/360);
    #declare EndPt=vrotate(10*x,-y*(Angle+1))+y*34*((Angle+1)/360);
    polygon 
    { 
      5,StartPt-1.5*y,EndPt-1.5*y,EndPt+1.5*y,StartPt+1.5*y,StartPt-1.5*y
      pigment { Red }
    }
    
    #declare StartPt=vrotate(9.95*x,-y*Angle)+y*34*(Angle/360);
    #declare EndPt=vrotate(9.95*x,-y*(Angle+1))+y*34*((Angle+1)/360);
    polygon 
    { 
      5,StartPt-1.5*y,EndPt-1.5*y,EndPt+1.5*y,StartPt+1.5*y,StartPt-1.5*y
      pigment { Blue }
    }
    
    #declare Angle=Angle+1;
  #end
}

#declare DoubleHelix = union
{
  object { Helix }
  object { Helix rotate y*120 }
}

#declare Adenine = Green;
#declare Thymine = Yellow;
#declare Guanine = White;
#declare Cytosine = Black;

#declare BasePairs = array[4][2]
{
  {Adenine,Thymine},
  {Thymine,Adenine},
  {Guanine,Cytosine},
  {Cytosine,Guanine}
}

#declare Bases = union
{
  #declare Angle = 0;
  
  #while (Angle<360)
    #declare StartPt=vrotate(9.6*x,-y*Angle)+y*34*(Angle/360);
    #declare EndPt=vrotate(StartPt,120*y);
    #declare MidPt=(StartPt+EndPt)/2;
    
    #declare RandBase = int(4*rand(RandSeed));
    
    cylinder
    {
      StartPt,MidPt,0.6
      pigment { BasePairs[RandBase][0] }
    }
    cylinder
    {
      MidPt,EndPt,0.6        
      pigment { BasePairs[RandBase][1] } 
    }
    #declare Angle=Angle+36;
  #end
}
 
#declare DeoxyriboseNucleicAcid = union
{
  object { DoubleHelix }
  object { Bases }
}

// V I E W P O R T ////////////////////////////////////////////////////////////

camera
{
  location <0,-34,-80>
  look_at <0,-34,0>
  rotate 360*y*clock
  translate y*20*sin(pi*clock*0.5)
}                

background { White }

// L I G H T S ////////////////////////////////////////////////////////////////

light_source
{
  <0,0,-80>
  White
}

// O B J E C T S //////////////////////////////////////////////////////////////

union
{
#declare i = 0;
#while (i<4)
  object { DeoxyriboseNucleicAcid translate i*y*-34}
  #declare i=i+1;
#end
rotate z*30
translate x*-30
}


CategoryArtistic

PovrayGallery/DNA (last edited 2009-03-24 18:49:50 by localhost)