Plasma effect: Difference between revisions
Content added Content deleted
No edit summary |
(Added Forth entry) |
||
Line 571: | Line 571: | ||
(demo/plasma)</lang> |
(demo/plasma)</lang> |
||
=={{header|Forth}}== |
|||
{{works with|gforth|0.7.3}} |
|||
Ouputs a PPM file. |
|||
<lang forth>: sqrt ( u -- sqrt ) ( Babylonian method ) |
|||
dup 2/ ( first square root guess is half ) |
|||
dup 0= if drop exit then ( sqrt[0]=0, sqrt[1]=1 ) |
|||
begin dup >r 2dup / r> + 2/ ( stack: square old-guess new-guess ) |
|||
2dup > while ( as long as guess is decreasing ) |
|||
nip repeat ( forget old-guess and repeat ) |
|||
drop nip ; |
|||
: sgn 0< if -1 else 1 then ; |
|||
: isin |
|||
256 mod 128 - \ full circle is 255 "degrees" |
|||
dup dup sgn * 128 swap - * \ second order approximation |
|||
negate 32 / ; \ amplitude is +/-128 |
|||
: color-shape 256 mod 6 * 765 - abs 256 - 0 max 255 min ; \ trapezes |
|||
: hue |
|||
dup color-shape . \ red |
|||
dup 170 + color-shape . \ green |
|||
85 + color-shape . ; \ blue |
|||
: plasma |
|||
outfile-id >r |
|||
s" plasma.ppm" w/o create-file throw to outfile-id |
|||
s\" P3\n500 500\n255\n" type |
|||
500 0 do |
|||
500 0 do |
|||
i 2 * isin 128 + |
|||
j 4 * isin 128 + + |
|||
i j + isin 2 * 128 + + |
|||
i i * j j * + sqrt 4 * isin 128 + + |
|||
4 / |
|||
hue |
|||
s\" \n" type |
|||
loop |
|||
s\" \n" type |
|||
loop |
|||
outfile-id close-file throw |
|||
r> to outfile-id ; |
|||
plasma</lang> |
|||
=={{header|FreeBASIC}}== |
=={{header|FreeBASIC}}== |