11:58
Анимация вращения куба — Лисья нора
§ Скриншот

§ Исходный код: Quick Basic
SCREEN 13 ' Vertex 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 ' Faces 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 ' Set camera position cam.x = 0: r.x = 0 cam.y = 0: r.y = 1 cam.z = 3: r.z = 0 ' Read vertex and face cube data 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 ' List faces FOR i = 0 TO 5 ' List face items FOR j = 0 TO 3 ' Get vertex id from face `i`, point on face `j` c = v(f(i, j)) ' Rotate X Axis ' ----------------------------------------- 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 ' Rotate Y Axis ' ----------------------------------------- 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 ' Save to p(j) 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 ' Draw lines FOR j = 0 TO 3 n = (j + 1) MOD 4 ' Calculate face direction 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 ' Wait key DO: i$ = INKEY$: LOOP WHILE i$ = "" CLS st = .05 ' Control keys 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