Here's a little example that draws an animated sliced sphere, using fake shadow and sin()
and cos()
to give the illusion of 3D.
def ellipse(center, wr, hr):
cx, cy = center
oval(cx - wr, cy - hr, wr * 2, hr * 2)
canvasSize = 800
radius = 0.9 * canvasSize / 2
numEllipses = 12
numFrames = 40
sphereAngle = radians(20) # make radians from degrees
ellipseHeight = sin(sphereAngle)
heightCompensation = cos(sphereAngle)
for frame in range(numFrames):
t = (0.25 + frame / numFrames) % 1.0
newPage(canvasSize, canvasSize)
frameDuration(1/20)
rect(0, 0, canvasSize, canvasSize)
translate(canvasSize/2, canvasSize/2)
fill(1)
shadow((0, -canvasSize * 0.03), canvasSize * 0.03,
(0, 0, 0, 0.6))
for i in range(numEllipses):
f = (i + (1 - t)) / (numEllipses)
circleY = 2 * (f - 0.5)
wr = radius * cos(asin(circleY))
y = heightCompensation * radius * circleY
ellipse((0, y), wr, ellipseHeight * wr)
saveImage("SlicedSphere.gif")
Somehow I failed to embed an animated gif in the post. Here's the animation: http://dailydrawbot.tumblr.com/post/170450438649/sliced-sphere