Построить конхоиду Никомеда - Pascal ABC
Формулировка задачи:
Построить кривую по параметрическому представлению (конхоида Никоме-
да):
x = a + l cost, y = a tg t + lsin t,
t ∈ (−π/2; π/2) – правая ветвь, t ∈ (π/2; 3π/2) – левая ветвь, a > 0, l > 0.
Рассмотреть случаи, когда l < a, l > a, l = a.
Решение задачи: «Построить конхоиду Никомеда»
textual
Листинг программы
uses graphABC;
var x0,y0,r,x1,y1:integer;
a1,a2,a3,l1,l2,l3,fn,fk,t,xr,yr:real;
begin
fn:=-pi/2; {начальный угол}
fk:=3*pi/2;{конечный}
x0:=windowwidth div 2;
y0:=windowheight div 2;
line(0,y0,windowwidth,y0);
line(x0,0,x0,windowheight);
{графики при l<a,l=a,l>a}
a1:=3;l1:=1;
a2:=3;l2:=6;
a3:=5;l3:=5;
r:=20;{масштабирование}
t:=fn;
while t<=fk do
begin
if abs(cos(t))>0.001 then
begin
xr:=a1+l1*cos(t);
yr:=a1*sin(t)/cos(t)+l1*sin(t);
x1:=x0+round(r*xr);
y1:=y0-round(r*yr);
setpixel(x1,y1,clGreen);
xr:=a2+l2*cos(t);
yr:=a2*sin(t)/cos(t)+l2*sin(t);
x1:=x0+round(r*xr);
y1:=y0-round(r*yr);
setpixel(x1,y1,clBlue);
xr:=a3+l3*cos(t);
yr:=a3*sin(t)/cos(t)+l3*sin(t);
x1:=x0+round(r*xr);
y1:=y0-round(r*yr);
setpixel(x1,y1,clRed);
end;
t:=t+0.001;
end;
setfontsize(11);
setfontcolor(clGreen);
textout(30,50,'l=1 a=3');
setfontcolor(clBlue);
textout(30,70,'l=6 a=3');
setfontcolor(clRed);
textout(30,90,'l=5 a=5');
end.
Объяснение кода листинга программы
- Объявлены переменные: x0, y0, r, x1, y1, a1, a2, a3, l1, l2, l3, fn, fk, t, xr, yr (20).
- Задаются начальные значения: fn:=-pi/2; fk:=3*pi/2; x0:=windowwidth div 2; y0:=windowheight div 2 (4).
- Строятся оси координат: line(0,y0,windowwidth,y0); line(x0,0,x0,windowheight); (2 строки).
- Задаются параметры для графиков при l<a,l=a,l>a: a1:=3; l1:=1; a2:=3; l2:=6; a3:=5; l3:=5; r:=20; t:=fn (7 строк).
- В цикле while t<=fk выполняется отрисовка графиков: если abs(cos(t))>0.001, то вычисляются точки xr, yr для каждого значения l и рисуются точки на графике (см. ниже).
- По окончанию цикла выводится текст с параметрами l=1, a=3, l=6, a=3, l=5, a=5 (5 строк). Примечание: В коде используется функция cos(t), sin(t) и tan(t), которые определены в пространстве имен graphABC.