Помощь - Поиск - Пользователи - Календарь
Полная версия: Эпициклоида
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Client
Привет!
Вот мой вариант
procedure epicikl;
Var
s:string;
a,b,x,i:integer;
t,x1,y1:real;
Begin
t:=0;
read(x);
read(a);
read(b);
cleardevice;
setcolor(red);
line(1,240,640,240);
line(320,1,320,480);
outtextxy(325,245,'0');
outtextxy(617,260,'X');
outtextxy(330,10,'Y');
line(630,245,640,240);
line(630,235,640,240);
line(315,5,320,0);
line(325,5,320,0);
setTextJustIfY(1,2);
setTextStyle(0,0,1);
for i:=1 to 320 div x do begin
line(320+i*x,230,320+i*x,250);
str(i,s);
outtextxy(322+i*x,251,s);
end;
for i:=1 to 320 div x do begin
line(320-i*x,230,320-i*x,250);
str(-i,s);
outtextxy(318-i*x,251,s);
end;
settextjustify(1,1);
for i:=1 to 240 div x do begin
line(310,240-i*x,330,240-i*x);
str(i,s);
outtextxy(305,240-i*x,s);
end;
for i:=1 to 240 div x do begin
line(310,240+i*x,330,240+i*x);
str(-i,s);
outtextxy(338,241+i*x,s);
end;
t:=0;
while t<=2*pi do begin
t:=t+pi/3500;
x1:=(a+b)*cos(t)-a*cos((a+b)*t/a);
y1:=(a+b)*sin(t)-a*sin((a+b)*t/a);
putpixel(320+round(x1*x/20),240+round(y1*x/20),7);
delay(50)
end;
readkey;
end;
Что надо изменить, подскажите плиз
volvo
Цитата
Что надо изменить, подскажите плиз
Изменить для чего? Программа работает, строит эпициклоиду, скажи, что тебе еще нужно от нее, будем думать, как изменить...
Client
На википедии там есть другого вида эпициклоиды, но если процедура правильно рисует то этого достаточно.
volvo
Для того, чтобы сказать тебе что-то конкретное, мне надо знать, с какими параметрами строится у тебя эпициклоида... При A = 3 и B = 9 (то есть, k = B/A = 3), изображение полностью совпадает с тем, что приведено в Википедии. Чтобы получить эпициклоиды другого вида надо просто задавать другие значения A и B...
Client
Если К-целое число, то все нормально рисует, а вот если не целое -то получается что-то страшное... smile.gif Можно ли как-то изменить, чтобы было как в википедии?
volvo
Так:
     t := -20;
while t < 20 do begin
t := t + 0.005;
x1:=(a+b)*cos(t)-a*cos((a+b)*t/a);
y1:=(a+b)*sin(t)-a*sin((a+b)*t/a);
putpixel(320+round(x1*x/20),240+round(y1*x/20),7);
delay(50);
end;
?
Client
Спасибо большое!!!
Можно вопрос: а почему от -20 до 20?
volvo
Ну, сделай от -бесконечности до +бесконечности smile.gif

t в каких пределах изменяется, посмотри...
Client
Цитата
Ну, сделай от -бесконечности до +бесконечности smile.gif
Долго ждать придется no1.gif
+1
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.