§ Скриншот

§ Исходный код: Quick Basic
SCREEN 13
DATA -1, 1, 1, 1, 1, 1, 1,-1, 1, -1,-1, 1
DATA -1, 1,-1, 1, 1,-1, 1,-1,-1, -1,-1,-1
DATA 1,0,3,2, 4,5,6,7, 0,1,5,4, 2,3,7,6, 5,1,2,6, 0,4,7,3
TYPE vec2: x AS SINGLE: y AS SINGLE: END TYPE
TYPE vec3: x AS SINGLE: y AS SINGLE: z AS SINGLE: END TYPE
DIM v(0 TO 7) AS vec3
DIM f(0 TO 5, 0 TO 3) AS INTEGER
DIM p(0 TO 3) AS vec2
DIM c AS vec3, t AS vec3, r AS vec3, cam AS vec3
cam.x = 0: r.x = 0
cam.y = 0: r.y = 1
cam.z = 3: r.z = 0
FOR i = 0 TO 7: READ v(i).x, v(i).y, v(i).z: NEXT
FOR i = 0 TO 5: READ f(i, 0), f(i, 1), f(i, 2), f(i, 3): NEXT
DO
FOR i = 0 TO 5
FOR j = 0 TO 3
c = v(f(i, j))
t.x = c.x
t.y = c.y * COS(r.x) + c.z * SIN(r.x)
t.z = c.z * COS(r.x) - c.y * SIN(r.x)
c = t
t.x = c.x * COS(r.y) + c.z * SIN(r.y)
t.y = c.y
t.z = c.z * COS(r.y) - c.x * SIN(r.y)
c = t
p(j).x = 160 + 100 * (c.x + cam.x) / (c.z + cam.z)
p(j).y = 100 - 100 * (c.y + cam.y) / (c.z + cam.z)
NEXT
FOR j = 0 TO 3
n = (j + 1) MOD 4
ABx = p(1).x - p(0).x: ABy = p(1).y - p(0).y
ACx = p(2).x - p(0).x: ACy = p(2).y - p(0).y
IF ACx * ABy < ACy * ABx THEN LINE (p(j).x, p(j).y)-(p(n).x, p(n).y)
NEXT
NEXT
DO: i$ = INKEY$: LOOP WHILE i$ = ""
CLS
st = .05
IF i$ = "w" THEN r.x = r.x + st
IF i$ = "s" THEN r.x = r.x - st
IF i$ = "a" THEN r.y = r.y + st
IF i$ = "d" THEN r.y = r.y - st
IF i$ = "q" THEN r.x = r.x + st: r.y = r.y + st
IF i$ = "e" THEN r.x = r.x - st: r.y = r.y - st
LOCATE 2, 2: PRINT i$
LOOP WHILE i$ <> CHR$(27)
§ Исходящий кот: GW BASIC
10 screen 7,1,1,0
20 camx=0: camy=0: camz=-2.5
30 crx=0: cry=0: crz=0
40 dim v(8,3), p(4,2)
50 data -1,1,1, 1,1,1, 1,-1,1, -1,-1,1, -1,1,-1, 1,1,-1, 1,-1,-1, -1,-1,-1
60 data 1,0,3,2, 4,5,6,7, 0,1,5,4, 2,3,7,6, 5,1,2,6, 0,4,7,3
70 for i=0 to 7: read v(i,0), v(i,1), v(i,2): next
80 restore 60
90 line(0,0)-(320,200),0,bf
100 for f=0 TO 5
110 for i=0 to 3
120 read k
130 rem "Coord 3D"
140 x=v(k,0): y=v(k,1): z=v(k,2)
150 x1=x*cos(cry) - sin(cry)*z: rem "Rotate Y"
160 z1=z*cos(cry) + sin(cry)*x
170 y1=y*cos(crx) - sin(crx)*z1: rem "Rotate X"
180 z=z1*cos(crx) + sin(crx)*y
190 x=x1*cos(crz) - sin(crz)*y1: rem "Rotate Z"
200 y=y1*cos(crz) + sin(crz)*x1
210 p(i,0)=160+(x+camx)*100/(z+camz)
220 p(i,1)=100-(y+camy)*100/(z+camz)
230 next i
240 rem "Drawing the Cube"
250 for i=0 to 3
260 j=(i+1) mod 4
270 abx=p(1,0)-p(0,0)
280 aby=p(1,1)-p(0,1)
290 acx=p(2,0)-p(0,0)
300 acy=p(2,1)-p(0,1)
310 if acx*aby < acy*abx then 330
320 line (p(i,0), p(i,1))-(p(j,0), p(j,1))
330 next i
340 next f
350 crx=cry+0.01
360 cry=cry+0.02
370 crz=cry+0.03
380 pcopy 1,0: goto 80