Prototyping raw image sequence assignment (2013): Difference between revisions
Lucia Dossin (talk | contribs) (→Lucia) |
Tamas Bates (talk | contribs) No edit summary |
||
Line 85: | Line 85: | ||
</source> | </source> | ||
[[File:Frames lucia.gif]] | [[File:Frames lucia.gif]] | ||
---- | |||
==== Tamas ==== | |||
{| | |||
|[[File:Plasma.gif]] | |||
|<source lang="Python"> | |||
import math, struct, sys | |||
from math import * | |||
tau = 2 * pi | |||
#computes distance from (x1,y1) to (x2,y2) | |||
def dist(x1, y1, x2, y2): | |||
return sqrt(float((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))) | |||
width = 320 | |||
height = 240 | |||
nFrames = 25 | |||
header = struct.pack("<BBBHHBHHHHBB",0,0,2,0,0,8,0,0,width,height,32,1<<5) | |||
for frame in xrange(nFrames): | |||
output = open("frames/frame%02d.tga" % frame, "wb") | |||
output.write(header) | |||
for y in xrange(height): | |||
for x in xrange(width): | |||
offset = frame * (1.0 / nFrames) | |||
primaryColor = abs(sin((0.2)*tau + (x) / (4.0+8.0*sin((0.2)*pi))) | |||
+ cos((0.2)*tau + (x+y) / (6.0+16.0*cos((0.2)*tau))) | |||
+ sin(dist(x, y, 32*sin(offset*tau)+96, 32*cos(offset*tau)+height / 2) / 24.0) # orbit 1 on left side | |||
+ sin(dist(x, y, 32*cos(offset*tau) + width-96, 32*sin(offset*tau)+height / 2) / 8.0) # orbit 2 on right side | |||
) | |||
r = abs(primaryColor - abs(cos(dist(x + sin(offset*tau), y + 25*sin(offset*tau), width / 2, -2000) / 4.0))) * 48 | |||
g = primaryColor * 48 if primaryColor >= 2 else primaryColor * 36 if primaryColor > 0.2 else abs(cos(5.0*dist(x + sin(offset*tau), y + 25*sin(offset*tau), width / 2, -2000) / 4.0)) * 24 | |||
b = abs(primaryColor + abs(cos(2000*offset*tau + dist(x + sin(offset*tau), y + sin(offset*tau), width / 2, -2000) / 8.0))) * 48 | |||
a = 255 | |||
output.write(struct.pack('BBBB', b, g, r, a)) | |||
output.close() | |||
</source> | |||
|} |
Revision as of 21:59, 5 November 2013
Assignment: In Python, following the techniques shown in the Raw image and Raw image sequence examples, create a 1 second long animation by generating 25 frames of an image sequence and converting them to a GIF. Use just the basics: loops, variables, and if statements.
Rules:
- The code should be "pure" python (just using the standard libraries of python such as struct).
- The code should be no more than 50 lines.
- The images should be 320 x 240 pixels in size.
Results
To be posted / linked to here. Please post both your code (again, PURE python -- no libraries and less than 50 lines) + the resulting image (converted to GIF and uploaded to the wiki).
Lucia
import struct, sys
width = 320
height = 240
xWhite = 0
header = struct.pack("<BBBHHBHHHHBB",0,0,2,0,0,8,0,0,width,height,32,1<<5)
totalframes = 25
for frame in xrange(totalframes):
frame = frame+1
out = open("frames/frame%02d.tga" % frame, "wb")
out.write(header)
for y in xrange(height):
for x in xrange(width):
xWhite = xWhite +1
if (frame != 1 and xWhite%frame == 0):
r = 255
g = 255
b = 255
a = 255
else:
r = 0
g = 0
b = 0
a = 255
out.write(struct.pack('B', b))
out.write(struct.pack('B', g))
out.write(struct.pack('B', r))
out.write(struct.pack('B', a))
out.close()
A variation (that's actually the original idea - the previous code was 'accidental'):
import struct, sys
width = 320
height = 240
header = struct.pack("<BBBHHBHHHHBB",0,0,2,0,0,8,0,0,width,height,32,1<<5)
totalframes = 25
for frame in xrange(totalframes):
out = open("last/frame_%02d.tga" % frame, "wb")
out.write(header)
for y in xrange(height):
for x in xrange(width):
if (x%10==0 and x == frame*10):
r = 255
g = 255
b = 255
a = 255
else:
r = 0
g = 0
b = 0
a = 255
out.write(struct.pack('B', b))
out.write(struct.pack('B', g))
out.write(struct.pack('B', r))
out.write(struct.pack('B', a))
out.close()