mirror of
https://github.com/Michaelangel007/apple2_hat3d.git
synced 2024-06-05 11:29:33 +00:00
108 lines
2.5 KiB
Markdown
108 lines
2.5 KiB
Markdown
# Hats off to Atari, er, Applesoft -- Hat 3D
|
|
|
|
* ![Hat 3D Solid](hat3d.png)
|
|
|
|
* ![Hat 3D Wireframe](wireframe.png)
|
|
|
|
To see wireframe mode delete Line 240 via: `240` ⏎
|
|
|
|
## Applesoft
|
|
|
|
```Basic
|
|
0 REM Converted from ATARI "Hat"
|
|
1 REM By Michaelangel007
|
|
2 REM X1 -> X
|
|
3 REM XF -> F
|
|
4 REM XI -> I
|
|
5 REM XL -> L
|
|
6 REM XT -> U
|
|
7 REM Y1 -> Y
|
|
8 REM YY -> V
|
|
9 REM ZS -> S
|
|
10 REM 2.25 * 2.25 -> 5.0625
|
|
100 REM ARCHIMEDES SPIRAL
|
|
110 REM
|
|
120 REM ANALOG MAGAZINE
|
|
130 REM
|
|
140 HGR:POKE 49234,0:REM $C052
|
|
150 F=4.71238905/144
|
|
160 FOR Z=-64 TO 64
|
|
170 S=Z*Z*5.0625
|
|
180 L=INT(SQR(20736-S)+0.5)
|
|
190 FOR I=-L TO L
|
|
200 U=SQR(I*I+S)*F
|
|
210 V=(SIN(U)+SIN(U*3)*0.4)*56
|
|
220 X=I+Z+160:Y=90-V+Z
|
|
222 IF X>279 THEN GOTO 250
|
|
224 IF Y>191 THEN GOTO 250
|
|
230 HCOLOR=3:HPLOT X,Y
|
|
240 HCOLOR=0:HPLOT X,Y+1 TO X,191
|
|
250 NEXT:NEXT
|
|
```
|
|
|
|
### Javascript
|
|
|
|
* [Javascript (HTML Preview)](http://htmlpreview.github.io/?https://raw.githubusercontent.com/Michaelangel007/apple2_hat3d/master/js/hat3d.html)
|
|
* [Javascript (Raw Git Preview)](https://cdn.rawgit.com/Michaelangel007/apple2_hat3d/master/js/hat3d.html)
|
|
|
|
```Javascript
|
|
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 );
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Original Atari BASIC
|
|
|
|
```
|
|
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
|
|
```
|
|
|
|
# Original Atari Description
|
|
|
|
* http://j-b.livejournal.com/419883.html
|
|
|