91 lines
1.7 KiB
JavaScript
91 lines
1.7 KiB
JavaScript
"use strict";
|
|
|
|
// Original Atari Basic Source
|
|
/*
|
|
|
|
100 REM ARCHIMEDES SPIRAL
|
|
110 REM
|
|
120 REM ANALOG MAGAZINE
|
|
130 REM
|
|
140 GRAPHICS 8+16:SETCOLOR 2,0,0
|
|
150 XP=144:XR=4.71238905:XF=XR/XP
|
|
160 FOR ZI=-64 TO 64
|
|
170 ZT=ZI*2.25:ZS=ZT*ZT
|
|
180 XL=INT(SQR(20736-ZS)+0.5)
|
|
190 FOR XI=0-XL TO XL
|
|
200 XT=SQR(XI*XI+ZS)*XF
|
|
210 YY=(SIN(XT)+SIN(XT*3)*0.4)*56
|
|
220 X1=XI+ZI+160:Y1=90-YY+ZI
|
|
230 TRAP 250:COLOR 1:PLOT X1,Y1
|
|
240 COLOR 0:PLOT X1,Y1+1:DRAWTO X1,191
|
|
250 NEXT XI:NEXT ZI
|
|
260 GOTO 260
|
|
*/
|
|
|
|
function hat( color, isSolid )
|
|
{
|
|
var f = 4.71238905 / 144;
|
|
var i, z;
|
|
var s, h;
|
|
var u, v;
|
|
var x, y;
|
|
var clear = [255-color[0], 255-color[1], 255-color[2], 255];
|
|
|
|
for( z = -64; z <= 64; z++ )
|
|
{
|
|
s = z*z*5.0625;
|
|
h = (Math.sqrt( 20736-s ) + 0.5) | 0;
|
|
for( i = -h; i <= h; i += 1 )
|
|
{
|
|
u = Math.sqrt( i*i + s ) * f;
|
|
v = (Math.sin( u ) + Math.sin( u*3 ) * 0.4) * 56;
|
|
x = i + z + 160;
|
|
y = 90 - v + z;
|
|
if ((x < canvas_w) && (y < canvas_h))
|
|
putpixel( x|0, y|0, color )
|
|
|
|
if( isSolid )
|
|
canvas_vline( x|0, y+1|0, undefined, clear );
|
|
}
|
|
}
|
|
}
|
|
|
|
function main()
|
|
{
|
|
document.body.style.overflow = 'hidden';
|
|
canvas_init( 320, 200 );
|
|
canvas_clear();
|
|
|
|
onSolid();
|
|
// onFrame();
|
|
}
|
|
|
|
function onSolid()
|
|
{
|
|
canvas_get();
|
|
|
|
// White on Black
|
|
canvas_grid( [0,0,0,255], 1, 1 );
|
|
hat( [255,255,255,255], 1 );
|
|
|
|
// Black on White
|
|
//hat( [0,0,0,255], 1 );
|
|
|
|
canvas_put();
|
|
}
|
|
|
|
function onFrame()
|
|
{
|
|
canvas_get();
|
|
|
|
// White on Black
|
|
canvas_grid( [0,0,0,255], 1, 1 );
|
|
hat( [255,255,255,255], 0 );
|
|
|
|
// Black on White
|
|
//hat( [0,0,0,255], 0 );
|
|
|
|
canvas_put();
|
|
}
|
|
|