Draw a sphere: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: added ASCII variant) |
(Added solution for Action!) |
||
Line 113: | Line 113: | ||
</pre> |
</pre> |
||
=={{header|Action!}}== |
|||
<lang Action!>INT ARRAY SinTab=[ |
|||
0 4 9 13 18 22 27 31 36 40 44 49 53 58 62 66 71 75 79 83 |
|||
88 92 96 100 104 108 112 116 120 124 128 132 136 139 143 |
|||
147 150 154 158 161 165 168 171 175 178 181 184 187 190 |
|||
193 196 199 202 204 207 210 212 215 217 219 222 224 226 |
|||
228 230 232 234 236 237 239 241 242 243 245 246 247 248 |
|||
249 250 251 252 253 254 254 255 255 255 256 256 256 256] |
|||
INT FUNC Sin(INT a) |
|||
WHILE a<0 DO a==+360 OD |
|||
WHILE a>360 DO a==-360 OD |
|||
IF a<=90 THEN |
|||
RETURN (SinTab(a)) |
|||
ELSEIF a<=180 THEN |
|||
RETURN (SinTab(180-a)) |
|||
ELSEIF a<=270 THEN |
|||
RETURN (-SinTab(a-180)) |
|||
ELSE |
|||
RETURN (-SinTab(360-a)) |
|||
FI |
|||
RETURN (0) |
|||
INT FUNC Cos(INT a) |
|||
RETURN (Sin(a-90)) |
|||
PROC Ellipse(INT x0,y0,rx,ry) |
|||
INT i |
|||
CARD x |
|||
BYTE y |
|||
x=x0+rx*Sin(0)/256 |
|||
y=y0+ry*Cos(0)/256 |
|||
Plot(x,y) |
|||
FOR i=5 TO 360 STEP 5 |
|||
DO |
|||
x=x0+rx*Sin(i)/256 |
|||
y=y0+ry*Cos(i)/256 |
|||
DrawTo(x,y) |
|||
OD |
|||
RETURN |
|||
PROC Main() |
|||
BYTE CH=$02FC,COLOR1=$02C5,COLOR2=$02C6 |
|||
INT cx=[160],cy=[96],r=[90],r2 |
|||
BYTE i |
|||
Graphics(8+16) |
|||
COLOR1=$0C |
|||
COLOR2=$02 |
|||
Color=1 |
|||
Ellipse(cx,cy,r,r) |
|||
FOR i=10 TO 90 STEP 10 |
|||
DO |
|||
r2=r*Cos(i)/256 |
|||
Ellipse(cx,cy,r,r2) |
|||
Ellipse(cx,cy,r2,r) |
|||
OD |
|||
DO UNTIL CH#$FF OD |
|||
CH=$FF |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Draw_a_sphere.png Screenshot from Atari 8-bit computer] |
|||
=={{header|Ada}}== |
=={{header|Ada}}== |