title: VPython Object Revolution
body: <p>Having to use VPython currently, and I want to make a model of the Solar System.</p>
  
  <p>Currently I have all the Planets and the orbital Rings, however, the actual <em>orbit</em> is what I'm finding very difficult.</p>
  
  <pre><code>GlowScript 2.7 VPython
  from visual import *
  
  
  
  # Declaring Celestial Body Objects
  Sun     = sphere(pos =     vec(0, 0, 0), radius =   10, color = color.yellow)
  Mercury = sphere(pos =    vec(25, 0, 0), radius =    2, color =  color.green)
  Venus   = sphere(pos =    vec(40, 0, 0), radius =  2.5, color =    color.red)
  Earth   = sphere(pos =    vec(50, 0, 0), radius = 2.65, color =   color.blue)
  Mars    = sphere(pos =    vec(70, 0, 0), radius =  2.3, color =    color.red)
  Jupiter = sphere(pos =    vec(90, 0, 0), radius =    3, color = color.orange)
  Saturn  = sphere(pos =   vec(105, 0, 0), radius =  2.9, color = color.orange)
  Uranus  = sphere(pos = vec(117.5, 0, 0), radius =  2.9, color = color.orange)
  Neptune = sphere(pos =   vec(135, 0, 0), radius =  2.8, color =   color.blue)
  Pluto   = sphere(pos =   vec(165, 0, 0), radius =  1.5, color =  color.white)
  
  
  
  # Declaring Orbital Rings of Celestial Body Objects
  Mercury.ring = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Mercury.pos.x * 2, Mercury.pos.x * 2))
  Venus.ring   = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Venus.pos.x * 2, Venus.pos.x * 2))
  Earth.ring   = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Earth.pos.x * 2, Earth.pos.x * 2))
  Mars.ring    = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Mars.pos.x * 2, Mars.pos.x * 2))
  Jupiter.ring = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Jupiter.pos.x * 2, Jupiter.pos.x * 2))
  Saturn.ring  = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Saturn.pos.x * 2, Saturn.pos.x * 2))
  Uranus.ring  = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Uranus.pos.x * 2, Uranus.pos.x * 2))
  Neptune.ring = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Neptune.pos.x * 2, Neptune.pos.x * 2))
  Pluto.ring   = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Pluto.pos.x * 2, Pluto.pos.x * 2))
  
  
  
  # Infinite Loop
  while 1 == 1:
  
      Mercury.rotate(angle = radians(360), axis = vec(Mercury.pos.y, Mercury.pos.x, 0), origin = vec(0, 0, 0))
      rate(50)
  
  print("Error! Escaped While Loop!")
  </code></pre>
  
  <p>When I switch out the <em>rotate</em> method with <code>Mercury.rotate(angle = 0.0174533, axis = vec(0, Mercury.pos.x, 0), origin = vec(0, 0, 0))</code>, it properly rotates... yet only for a quarter of the rotation. I've read about everything to do with <a href="http://vpython.org/contents/docs/rotation.html" rel="nofollow noreferrer">this</a>, but N/A.</p>
  
  <p>After the quarter revolution, the planet sometimes decides to violently "seizure," when the angle is a larger number. It just seems like a barrier of sorts.</p>