Построить график конхоиды Никомеда - Turbo Pascal
Формулировка задачи:
Помогите построить график конхоиды Никомеда:
уравнения: x=a+l*cos(t), y=a*tg(t)+l*sin(t)
t=(-pi/2;pi/2) --для правой ветви.
t=(pi/2;3*pi/2) -- для левой ветви.
a>0, l>0.
Рассмотреть случаи, когда: l<a, l>a, l=a.
Заранее спасибо.
Решение задачи: «Построить график конхоиды Никомеда»
textual
Листинг программы
uses graph;
procedure Konh(a,l:real;x,y,c:integer);
var fn,fk,t,xr,yr,r:real;
x1,y1:integer;
begin
fn:=0;
fk:=2*pi;
r:=60;
t:=fn;
while t<=fk do
begin
if abs(cos(t))>0.001 then
begin
xr:=a+l*cos(t);
yr:=a*sin(t)/cos(t)+l*sin(t);
x1:=x+round(r*xr);
y1:=y-round(r*yr);
putpixel(x1,y1,c);
end;
t:=t+0.001;
end;
end;
var x0,y0:integer;
begin
initgraph(x0,y0,'');
x0:=getmaxX div 2;
y0:=getmaxY div 2;
line(0,y0,getmaxX,y0);
line(x0,0,x0,getmaxY);
{ГРАФИКИ}
Konh(2,1,x0,y0,10);
Konh(1,1,x0,y0,11);
Konh(1,2,x0,y0,12);
setcolor(10);
outtextXY(20,20,'a=2 l=1');
setcolor(11);
outtextXY(20,40,'a=1 l=1');
setcolor(12);
outtextXY(20,60,'a=1 l=2');
readln
end.
Объяснение кода листинга программы
- Подключается библиотека graph.
- Создается процедура Konh, которая принимает аргументы a, l, x, y, c - неизвестного назначения.
- Объявляются переменные fn, fk, t, xr, yr, r: real; x1, y1: integer;
- Задаются начальные значения для функции t: fn=0; fk=2*pi; r=60; t=fn;
- В цикле while t<=fk do — Если abs(cos(t))>0.001 то — Вычисляются координаты xr, yr по формуле xr=a+lcos(t); yr=asin(t)/cos(t)+lsin(t); — Вычисляются координаты x1, y1 по формуле x1:=x+round(rxr); y1:=y-round(r*yr); — Выводится пиксель на график с координатами x1, y1, c; — t=t+0.001; — t=t+0.001;
- Конец процедуры Konh.
- Объявляются переменные x0, y0: integer;
- Инициализируется график с координатами x0, y0,'';
- Вычисляются координаты максимума xmax, ymax;
- Вычисляются координаты осей x, y;
- Строятся линии с координатами x0, y0, xmax, ymax;
- Строится горизонтальная линия с координатами x0, y0;
- Строятся вертикальные линии с координатами x0, 0, x0, ymax;
- Выводится текст 'a=2 l=1' с помощью функции outtextXY(20,20);
- Выводится текст 'a=1 l=1' с помощью функции outtextXY(20,40);
- Выводится текст 'a=1 l=2' с помощью функции outtextXY(20,60);
- Завершается работа программы.