Advertisement
Guest User

qb643Dtest

a guest
Jul 19th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 4.07 KB | None | 0 0
  1. SCREEN 12
  2.  
  3. DECLARE SUB pointt(xp, yp, zp, x, y, z, r, rh)
  4. DECLARE FUNCTION dist(x1,y1,x2,y2)
  5.  
  6. xp = 0
  7. yp = 0
  8. zp = 0
  9. r2 = 0
  10. rh2 = 0
  11. CONST pi = 3.141592653589793
  12. 'main
  13. _MOUSEMOVE 320, 240
  14. _MOUSEHIDE
  15. DO
  16.     ' c3 = c3 + 1
  17.  
  18.     c2 = c2 + 1
  19.     IF c2 = 1 THEN
  20.         ' CLS
  21.         c = c + 2
  22.         c2 = 0
  23.     END IF
  24.  
  25.     ' IF c3 = 4 THEN
  26.     '  CLS
  27.  
  28.     ' c3 = 0
  29.     '  END IF
  30.  
  31.  
  32.     CALL pointt(xp, yp, zp, 0, 0, 100, r, rh)
  33.     CALL pointt(xp, yp, zp, 20, 0, 100, r, rh)
  34.     CALL pointt(xp, yp, zp, 20, 20, 100, r, rh)
  35.     CALL pointt(xp, yp, zp, 20, 20, 120, r, rh)
  36.     CALL pointt(xp, yp, zp, 0, 20, 120, r, rh)
  37.     CALL pointt(xp, yp, zp, 20, 0, 120, r, rh)
  38.     CALL pointt(xp, yp, zp, 0, 0, 120, r, rh)
  39.     CALL pointt(xp, yp, zp, 0, 20, 100, r, rh)
  40.  
  41.     CLS
  42.     FOR i2 = -30 TO 30 STEP 3
  43.         FOR i = 0 + (c MOD 10) TO 360 + (c MOD 10) STEP 10
  44.             CALL pointt(xp, yp, zp, 30 * COS(i2 * 3 * pi / 180) * SIN(i * pi / 180), 30 * COS(i2 * 3 * pi / 180) * COS(i * pi / 180), 30 * COS(((i2 + 30) * 3) * pi / 180), r, rh)
  45.         NEXT
  46.     NEXT
  47.     ' PRINT r2
  48.     ' PRINT xp
  49.     'PRINT yp
  50.  
  51.     a$ = "n"
  52.  
  53.  
  54.  
  55.     _DELAY 0.04
  56.  
  57.  
  58.  
  59.  
  60.     a$ = INKEY$
  61.     DO WHILE _MOUSEINPUT
  62.         r2 = r2 + 0.01 * (320 - _MOUSEX)
  63.  
  64.         rh2 = rh2 - 0.01 * (240 - _MOUSEY)
  65.  
  66.         IF rh2 > 90 THEN rh2 = 90
  67.         IF rh2 < -90 THEN rh2 = -90
  68.         IF r2 > 360 THEN r2 = 0
  69.         IF r2 < 0 THEN r2 = 360
  70.  
  71.     LOOP
  72.     _MOUSEMOVE 320, 240
  73.  
  74.     IF a$ = "a" THEN
  75.         xp = xp - 5 * SIN(r)
  76.         yp = yp + 5 * COS(r)
  77.     ELSEIF a$ = "e" THEN
  78.         xp = xp + 5 * SIN(r)
  79.         yp = yp - 5 * COS(r)
  80.     ELSEIF a$ = "," THEN
  81.         xp = xp + 5 * COS(r)
  82.         yp = yp + 5 * SIN(r)
  83.     ELSEIF a$ = "o" THEN
  84.         xp = xp - 5 * COS(r)
  85.         yp = yp - 5 * SIN(r)
  86.     ELSEIF a$ = "p" THEN
  87.         r2 = r2 + 2
  88.     ELSEIF a$ = "u" THEN
  89.         r2 = r2 - 2
  90.     ELSEIF a$ = "y" THEN
  91.         rh2 = rh2 + 2
  92.     ELSEIF a$ = "i" THEN
  93.         rh2 = rh2 - 2
  94.     ELSEIF a$ = ";" THEN
  95.         zp = zp + 5
  96.     ELSEIF a$ = "j" THEN
  97.         zp = zp - 5
  98.     END IF
  99.     IF r2 > 360 THEN r2 = 0
  100.     IF r2 < 0 THEN r2 = 360
  101.     r = (r2 / 180) * pi
  102.     rh = (rh2 / 180) * pi
  103.  
  104. LOOP UNTIL a$ = "q"
  105. 'end main
  106.  
  107. SUB pointt (xp, yp, zp, xo, yo, zo, r, rh)
  108. fov = pi / 2
  109. xq = xp + COS(r)
  110. yq = yp + SIN(r)
  111. 'PRINT SQR((xo - xp) ^ 2 + (yo - yp) ^ 2) - SQR((xq - xo) ^ 2 + (yq - yo) ^ 2)
  112. IF SQR((xo - xp) ^ 2 + (yo - yp) ^ 2) > SQR((xo - xq) ^ 2 + (yo - yq) ^ 2) THEN
  113.     xs = _ASIN(((xo - xp) * SIN(r) - (yo - yp) * COS(r)) / SQR((xo - xp) ^ 2 + (yo - yp) ^ 2)) * 640 / fov + 640 / 2
  114.  
  115.     ' ys = (ATN((zo - zp) / (SQR((xo - xp) ^ 2 + (yo - yp) ^ 2))) + rh) * 640 / fov + 320
  116.  
  117.     k = 1
  118.     IF _ACOS((1 + dist(xp, yp, 0, xo, yo, 0) - dist(xo, yo, 0, xq, yq, 0)) / (2 * dist(xp, yp, 0, xo, yo, 0))) > 2 * pi THEN k = -1
  119.     IF zo > zp THEN k = -1
  120.  
  121.     ys = _ASIN((SIN(rh) * SQR((xo - xp) ^ 2 + (yo - yp) ^ 2) - COS(rh) * (zo - zp)) / SQR((xo - xp) ^ 2 + (yo - yp) ^ 2 + (zo - zp) ^ 2)) * 640 / fov + 480 / 2
  122.     'ys = k * (_ACOS(SQR((xo - xp) ^ 2 + (yo - yp) ^ 2) / SQR((xo - xp) ^ 2 + (yo - yp) ^ 2 + (zo - zp) ^ 2)) - rh) * 640 / fov + 320
  123.  
  124.  
  125.     ' d = COS(r) * (xp - xo) + SIN(r) * (yp - yo)
  126.     ' xl = xo * COS(r) + (xp - yp + yo) * SIN(r)
  127.     ' yl = TAN(r) * (xl - xp) + yp
  128.     ' IF (xl - xp) ^ 2 + (yl - yp) ^ 2 < (xl - xq) ^ 2 + (yl - yq) ^ 2 THEN
  129.     ' d = -ABS(d)
  130.     'ELSE d = ABS(d)
  131.     'END IF
  132.     ' ys = -_ASIN((d * SIN(rh) - COS(rh) * (zo - zp)) / SQR(d ^ 2 + (zo - zp) ^ 2)) * 640 / fov + 320
  133.  
  134.     '  xq = (xp - (dist(xp, yp, 0, xo, yo, 0) - 1) * xo) / dist(xp, yp, 0, xo, yo, 0)
  135.     ' yq = (yp - (dist(xp, yp, 0, xo, yo, 0) - 1) * yo) / dist(xp, yp, 0, xo, yo, 0)
  136.     ' alfa = _ACOS((1 + dist(xp, yp, zp, xo, yo, zo) ^ 2 - dist(xo, yo, zo, xq, yq, zp) ^ 2) / (2 * dist(xp, yp, zp, xo, yo, zo)))
  137.     ' IF zo < zp THEN alfa = -alfa
  138.     '  ys = (alfa - rh) * 640 / fov + 320
  139.  
  140.  
  141.  
  142.     LINE (xs, ys)-(xs + 5, ys + 5), 2, BF
  143. END IF
  144.  
  145. END SUB
  146. FUNCTION dist (x1, y1, z1, x2, y2, z2)
  147. dist = SQR((x2 - x1) ^ 2 + (y2 - y1) ^ 2 + (z2 - z1) ^ 2)
  148. END FUNCTION
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement