Написать программу, изображающую на экране поверхность, образованную вращением вокруг оси OX графика функции
Категория: Basic
2011-09-09 16:59:27
Написать программу, Изображающую на экране поверхность, образованную вращением вокруг оси 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<
Поделиться: