Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Спираль Котеса на Pascal Abc. Помогите решить, пожалуйста

Ренат Шаймарданов Мастер (1197), закрыт 5 лет назад
Помогите с проблемкой, пожалуйста! Мне необходимо написать программу, которая выводит в полярной или декартовой (на выбор) системе координат график спирали Котеса, окно должно масштабироваться. Единственная формула есть на википедии https://en.wikipedia.org/wiki/Cotes's_spiral]https://en.wikipedia.org/wiki/Cotes's_spiral
Вот что я намудрил по коду на Pascal ABC.Net

Program Grafik_polar;
uses GraphABC;

const
W = 800;
H = 600;

var
x0,y0,x1,y1,i,j,m,k:integer;
x,y,fi,r:real;
s1,s2:string;

// Функция вычисления гиперболического косинуса
function cosh(x:real):real;
begin
cosh:=(exp(x)+(exp(-x))/2);
end;

// Функция вычисления гиперболического синуса
function sinh(x:real):real;
begin
sinh:=(exp(x)-(exp(-x))/2);;
end;

// Процедура вырисовки осей Оху с подписями и сеткой
procedure DrawPlotOxy;
begin
SetWindowSize(W,H);
x0:=WindowWidth div 2;
y0:=WindowHeight div 2;
setPenWidth(2);
line(x0,0,x0,H); line(0,y0,W,y0); { оси координат }

// Вертикальные линии сетки и подписи на оси х
i:=0; j:=0; m:=0; SetPenWidth(1); SetPenColor(clGray);
while i<x0 do
begin
line(x0 + i,y0 + trunc(H/2),x0 + i,y0 - trunc(H/2)); // вправо от оси У
line(x0 - i,y0 + trunc(H/2),x0 - i,y0 - trunc(H/2)); // влево от оси У
s1:=IntToStr(j); s2:=IntToStr(m); // переводим числа в строки
TextOut(x0 + i - 2, y0 + 4, s1); TextOut(x0 - i - 2, y0 + 4, s2); // выводим надписи вдоль оси Х
i:=i+20; // увеличиваем шаг по оси Ох
j:=j+1; m:=m-1;
end;

// Горизонтальные линии сетки
i:=0;
while i<=y0 do
begin
line(0,y0 + i,W,y0 + i); // вверх относительно оси Ох
line(0,y0 - i,W,y0 - i); // вниз относительно оси Ох
i:=i+20;
end;

end;

// Процедура вырисовки графика функции
procedure DrawFunc(a,n,eps:real);
begin
SetPenColor(clGreen); SetPenWidth(1);
fi:=0;
while fi<2*pi do
begin
r:=1/(a * exp(n*fi+eps));{уравнение в полярных координатах}
x:=r * cos(fi);
y:=r * sin(fi);
x1:=trunc(x0 + x * k); y1:=trunc(y0 - y * k); { экранные координаты }
Circle(x1,y1,1);
fi:=fi+0.001;
end;

end;

begin
DrawPlotOxy;
k:=20;
DrawFunc(10,1.5,1);
end.
[/code]

Да это не тот код, но переделываю под формулу в википедии у меня не получается график. Как исправить данный код, чтоб все работало? Помогите, пожалуйста, очень надо!!!
Похожие вопросы