Graph: построить семейство одинаковых кругов, центры которых расположены на тангенсоиде - Free Pascal
Формулировка задачи:
Построить семейство одинаковых кругов, центры которых расположены на тангенсоиде (Y = C*sin(X)/cos(X) на [–π/2: π/2]). Нарисовать оси координат.
Решение задачи: «Graph: построить семейство одинаковых кругов, центры которых расположены на тангенсоиде»
textual
Листинг программы
program tangensoid; {$mode objfpc}{$H+} {решаем задачу с [url]http://www.cyberforum.ru/free-pascal/thread1583591.html[/url] по зпдпнию: Построить семейство одинаковых кругов, центры которых расположены на тангенсоиде (Y = C*sin(X)/cos(X) на [–ПЂ/2: ПЂ/2]). Нарисовать оси координат.} uses graph, math; const R = 2; // радиус "точки" DX = R*2; //шаг по X var gDriver, gMode: smallint; cx, cy: integer; //координаты центра экрана c: single = 1.0; //коэфициент для формулы i: integer; stepx: Single; //шаг по X в радианах sf: Single; f: Single; //значение тангенсойда function tangensoid(const ax: single): single; inline; begin Result:= sin(ax)/cos(ax); end; begin gDriver := detect; initgraph(gdriver, gmode, ' '); // Графический модуль cx := getmaxx div 2; cy := getmaxy div 2; //запрашивем коэф. C (0.1 - хорошее значение) write('Enter (C): '); ReadLn(c); //оси координат SetColor(white); Line(0, cy, GetMaxX, cy); Line(cx, 0, cx, GetMaxY); //рисуем "точки" //высчитываем шаг в радианах stepx:= pi / GetMaxX * DX; sf:= GetMaxY / pi; // scale factor - кэф. чтобы привести значения ф-ции //в диапазоне -pi/2 .. pi/2 // к диапазону разрешения экрана 0.. 768 (например) //начальное значение X SetColor(red); for i:= 0 to GetMaxX div DX do begin f:= sf * c * tangensoid(-(pi/2) + i*stepx); FillEllipse(i*DX, cy - trunc(f), R, R); end; Readln; CloseGraph; end.
Объяснение кода листинга программы
- Объявление переменных и констант — gDriver, gMode: smallint; — cx, cy: integer; — c: single = 1.0; — i: integer; — stepx: Single; — sf: Single; — f: Single; — tangensoid(const ax: single): single; inline; — gDriver := detect; — initgraph(gdriver, gmode, ' '); — cx := getmaxx div 2; — cy := getmaxy div 2; — write('Enter (C): '); — ReadLn(c); — SetColor(white); — Line(0, cy, GetMaxX, cy); — Line(cx, 0, cx, GetMaxY); — stepx:= pi / GetMaxX DX; — sf:= GetMaxY / pi; — for i:= 0 to GetMaxX div DX do begin — f:= sf c tangensoid(-(pi/2) + istepx); — FillEllipse(i*DX, cy - trunc(f), R, R); — end; — Readln; — CloseGraph;
- Задача программы - построение семейства одинаковых кругов, центры которых расположены на тангенсоиде Y = Csin(X)/cos(X) на [-ПЂ/2: ПЂ/2].
— Программа запрашивает у пользователя коэффициент C, затем рисует оси координат.
— Затем программа вычисляет шаг по X в радианах и коэффициент масштабирования для приведения значений функции в диапазон разрешения экрана.
— Далее программа рисует
точки
, используя цикл от 0 до максимального значения X, разделенного на шаг DX. — Для каждой точки вычисляется значение функции, используя формулу Y = Csin(X)/cos(X) и подставляя полученное значение в функцию tangensoid. — Функция tangensoid вычисляет значение функции Y = C*sin(X)/cos(X) для заданного аргумента X. — Затем программа рисует окружность с центром в каждой точке, используя функцию FillEllipse. — В конце программа ожидает ввода пользователя и закрывает графический модуль.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д