Computer Science Canada

represention of light emitting objects moving in 2d space

Author:  Homer_simpson [ Sun Dec 13, 2009 8:13 pm ]
Post subject:  represention of light emitting objects moving in 2d space

objects moving near the speed of light but speed of light does not increase. The lighter the color the older the emission.
Quote:
View.Set ("graphics:1000;600,offscreenonly")
for clr : 1 .. 100
RGB.SetColor (clr + 100, (clr + 50) * 2, (clr + 50) * 2, (clr + 50) * 2)
end for
var scale := 10
const mxm := 100
const renewal := 50
const SOL := 1.5
const freqlength := 30

type Emitter :
record
x, y, vx, vy : real
xx : array 1 .. mxm of real
yy : array 1 .. mxm of real
rr : array 1 .. mxm of real
i : int
end record



color (white)
colorback (black)
cls



proc initializeEmitter (var e : Emitter, x, y, vangle, vmag : real)
e.x := x
e.y := y
e.vx := cosd (vangle) * vmag
e.vy := sind (vangle) * vmag
for i : 1 .. mxm
e.xx (i) := e.x
e.yy (i) := e.y
e.rr (i) := 10
end for
e.i := 1
end initializeEmitter





proc drawEmitter (e : Emitter, c1, c2 : int)
for i : 1 .. mxm
drawoval (round (e.xx (i) / scale) + (maxx div 2), round (e.yy (i) / scale) + (maxy div 2), round (e.rr (i) / scale), round (e.rr (i) / scale), (((round (e.rr (i) / scale) div freqlength)
mod (c2 - c1))) + c1)
end for
drawfilloval (round (e.x / scale) + (maxx div 2), round (e.y / scale) + (maxy div 2), 5, 5, white)
end drawEmitter

proc moveEmitter (var e : Emitter)
e.x += e.vx
e.y += e.vy
e.i += 1
if e.i >= mxm * renewal then
e.i := 1
end if
e.xx (1 + (e.i div renewal)) := e.x
e.yy (1 + (e.i div renewal)) := e.y
e.rr (1 + (e.i div renewal)) := 10
for i : 1 .. mxm
e.rr (i) += SOL
end for

end moveEmitter



var e1, e2, e3 : Emitter
initializeEmitter (e1, 500, 0, 20, .8)
initializeEmitter (e2, -2000, 0, 200, 1)
initializeEmitter (e3, -500, 0, 160, 1.3)

loop
moveEmitter (e1)
moveEmitter (e2)
moveEmitter (e3)
drawEmitter (e1, 16, 31)
drawEmitter (e2, 16, 31)
drawEmitter (e3, 16, 31)

View.Update
%cls
end loop




: