Написать программу, изображающую на экране поверхность, образованную вращением вокруг оси OX графика функции

Написать программу, Изображающую на экране поверхность, образованную вращением вокруг оси OX графика функции y=-4/(x+1) внизу в центре экрана должно быть название функции.

Пробел - перерисовка
Escape - выход
code: #basic
  ' Объявим константы:
    CONST pi = 3.141592653589793#
    CONST Gradus = pi / 180, RAD = 180 / pi
  '  Углы обзора
    CONST OBZORh = 40 * Gradus, OBZORv = 33 * Gradus
  '  Разрешение экрана
    CONST RezX = 639, RezY = 479
    CONST Dist = 200
  '  Переменные препроцессора точек
    DIM Ln1Ugol!, Ln2Ugol!, Ln3Ugol!, Ln4Ugol!
    DIM a1!, a2!, a3!, a4!, b1!, b2!, b3!, b4!
    DIM CamX!, CamY!, CamZ!, CamHcrn!, CamVcrn!
    DIM Func%(Dist)
 
SCREEN 12
FOR i% = 0 TO Dist
  x = i% / 40
  F = -4 / (x + 1)       ' Наша функция
  Func%(i%) = F * 100
NEXT
  '  Рассчитаем угловые коеф-ты
   Ln1Ugol! = OBZORh: Ln2Ugol! = -OBZORh
   Ln3Ugol! = OBZORv: Ln4Ugol! = -OBZORv
   a1! = SIN(Ln1Ugol!): b1! = -COS(Ln1Ugol!)
   a2! = SIN(Ln2Ugol!): b2! = -COS(Ln2Ugol!)
   a3! = SIN(Ln3Ugol!): b3! = -COS(Ln3Ugol!)
   a4! = SIN(Ln4Ugol!): b4! = -COS(Ln4Ugol!)
 '  Параметры камеры
 CamHcrn! = 0 * Gradus   ' Крен камеры
 CamVcrn! = 0 * Gradus   ' Поворот камеры
 CamX! = -800
 CamY! = 0
 CamZ! = 0
 
ReDraw = 1
 '  Основной цикл
DO
Kb$ = INKEY$
 IF Kb$ = " " THEN ReDraw = 1
 
 IF ReDraw THEN
    ReDraw = 0
    CLS 1
  SinCamH! = SIN(CamHcrn!): CosCamH! = COS(CamHcrn!)
  SinCamV! = SIN(CamVcrn!): CosCamV! = COS(CamVcrn!)
    ' Цикл по точкам
  FOR Vr% = 0 TO 359 STEP 2
  SinusU! = SIN(Vr% * Gradus) * 2.5: CosinusU! = COS(Vr% * Gradus) * 2.5
    FOR i% = 0 TO Dist STEP 2
     Xc% = SinusU! * i%'    RND * 500 - 250
     Yc% = CosinusU! * i%'  RND * 500 - 250
     Zc% = Func%(i%) - 100
     TXx! = Xc% - CamX!: TYy! = Yc% - CamY!: TZz! = Zc% - CamZ!
      ' Обратный поворот относительно 2х осей
     TX! = TXx! * CosCamH! + TYy! * SinCamH!    ' Первая плоскость XY
     TY! = -TXx! * SinCamH! + TYy! * CosCamH!
      ' Вторая плоскость XZ
     TZ! = -TX! * SinCamV! + TZz! * CosCamV!  'Сперва Tz ВАЖНО !!!
     TX! = TX! * CosCamV! + TZz! * SinCamV!
      ' Расчёт горизонтального расстояния
    Rasst1! = (a1! * TX! + b1! * TY!)
    Rasst2! = (a2! * TX! + b2! * TY!)
      IF Rasst1! < 0 OR Rasst2! > 0 GOTO Ex3D   'Точка вне видимости
      OBRas1! = ABS(Rasst1!) + ABS(Rasst2!)
      IF OBRas1! <> 0 THEN XeKf# = Rasst1! / OBRas1! ELSE XeKf# = 1
      ex! = XeKf# * RezX
      ' Расчёт вертикального расстояния
    Rasst3! = (a3! * TX! + b3! * TZ!)
    Rasst4! = (a4! * TX! + b4! * TZ!)
      IF Rasst3! < 0 OR Rasst4! > 0 GOTO Ex3D   'Точка вне видимости
      OBRas2! = ABS(Rasst3!) + ABS(Rasst4!)
      IF OBRas2! <> 0 THEN YeKf# = Rasst3! / OBRas2! ELSE YeKf# = 1
      ey! = YeKf# * RezY
      PSET (ex!, ey!), 15
Ex3D:
    NEXT i%
  NEXT Vr%
  END IF
 
LOOP UNTIL Kb$ = CHR$(27)

автор: >Quiet Snow<

Поделиться:

Похожие статьи: