|
Вопрос # 1 756/ вопрос открыт / |
|
Приветствую, уважаемые эксперты! Мне необходимо начертить график. Спирального вида. x:=a*cos(fi)+a*fi*sin(fi) и y:=a*sin(fi)+a*fi*cos(fi). Вроде бы написал программу, а график мне не нравиться. Выглядит как спираль архимеда, хотя у неё другая формула. Где ошибка моя?
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
-
- var
- a,b,c,d,x,y,f,k,p,t,n,r,arad,xmax,ymax,ymin,xmin:real;
- xfrm,yfrm,i:integer;
- const pi=3.141593;
- begin
- form2.Show;
-
- xfrm:=Form2.Width;
- yfrm:=Form2.Height;
-
-
- for i:=0 to trunc(xfrm) do Form2.Canvas.Pixels[i,trunc(yfrm/2)]:=clWhite;
- for i:=0 to trunc(xfrm) do Form2.Canvas.Pixels[trunc(xfrm/2),i]:=clWhite;
- x:=0;y:=0;t:=0;a:=0;
- xmax:=strtofloat(Edit1.text);
- ymax:=xmax;
- xmin:=strtofloat(Edit2.text)*(-1);
- ymin:=ymin;
- //n:=strtofloat(Edit3.text);
-
- a:=strtofloat(Edit4.text);
- p:=strtofloat(Edit5.text);
- t:=0;x:=0;
- while (x < (xfrm/2)) do
- begin
- Form2.Canvas.MoveTo(trunc(xfrm/2+x),trunc(yfrm/2-5));
- Form2.Canvas.LineTo(trunc(xfrm/2+x),trunc(yfrm/2+5));
- Form2.Canvas.MoveTo(trunc(xfrm/2-x),trunc(yfrm/2-5));
- Form2.Canvas.LineTo(trunc(xfrm/2-x),trunc(yfrm/2+5));
-
- //Form1.Canvas.TextOut(trunc(xfrm/2+x),trunc(yfrm/2),floattostr(t));
- //Form1.Canvas.TextOut(trunc(xfrm/2-x),trunc(yfrm/2),floattostr(t*(-1)));
- t:=t+1;
- x:=x+(xfrm/xmax);
- end;
- t:=0;y:=0;
-
-
-
- while (y < (yfrm/2)) do
- begin
- Form2.Canvas.MoveTo(trunc(xfrm/2-5),trunc(yfrm/2+y));
- Form2.Canvas.LineTo(trunc(xfrm/2+5),trunc(yfrm/2+y));
- Form2.Canvas.MoveTo(trunc(xfrm/2-5),trunc(yfrm/2-y));
- Form2.Canvas.LineTo(trunc(xfrm/2+5),trunc(yfrm/2-y));
-
- //Form1.Canvas.TextOut(trunc(xfrm/2),trunc(yfrm/2+y),floattostr(t));
- //Form1.Canvas.TextOut(trunc(xfrm/2),trunc(yfrm/2-y),floattostr(t*(-1)));
- t:=t+1;
-
-
- t:=xmin;
- f:=0;
- chart1.SeriesList[0].Clear;
- y:=y+(yfrm/ymax);
- end;
- Form2.Canvas.MoveTo(0,0);
-
-
-
- while a < 360 * 4 do begin
- arad := a * pi / 180;
-
-
- x:=a*cos(arad)+a*arad*sin(arad);
- y:=a*sin(arad)-a*arad*cos(arad);
- chart1.SeriesList[0].AddXY(x,y,'', clRed);
- Form2.Canvas.Pixels[trunc(xfrm/2 + x*xfrm/xmax),trunc(yfrm/2 - y*yfrm/ymax)]:=clBlack;
-
- //a := a + 0.1;
-
- end;
-
- // chart1.SeriesList[0].Clear;
-
- end;
-
-
- end
 |
Вопрос задал: mamont (статус: Посетитель)
Вопрос отправлен: 7 июля 2008, 22:50
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Мережников Андрей
Здравствуйте, mamont!
Первый цикл - понятно - рисует горизонтальную ось (хотя для чего округлять целое число? trunc(xfrm)).
Что рисует второй цикл - не совсем понятно, видимо задумывалось - горизонтальную ось, в таком случае надо исправить trunc(xfrm) на yfrm. Чему равно ymin - непонятно (ymin:=ymin???).
Насколько я понимаю, параметр a в исходных формулах не связан с углом fi. А при вычислении в программе Вы ставите угол fi в зависимость от константы a. Строки:
arad := a * pi / 180; - здесь должно быть не a, а угол fi в градусах
x:=a*cos(arad)+a*arad*sin(arad);
y:=a*sin(arad)-a*arad*cos(arad);
 |
Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 8 июля 2008, 05:36
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Шичко Игорь
Здравствуйте, mamont!
Если следовать формуле то должно быть:
x:=a*cos(arad)+a*arad*sin(arad);
y:=a*sin(arad)+a*arad*cos(arad);
Много лишних переменных, которые не используются: xmin, ymin
Если они далее понадобятся, то наверное ymin:= xmin
 |
Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 8 июля 2008, 09:35
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 8 июля 2008, 16:25; участников в обсуждении: 2.
|
mamont (статус: Посетитель), 7 июля 2008, 22:52 [#1]:
Мне необходимо было сделать так, что бы была возможность менять угол.
|
|
Мережников Андрей (статус: Абитуриент), 8 июля 2008, 16:25 [#2]:
Необходимость изменения угла разве подразумевает введение зависимости значения угла от параметра a???
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|