| 
| 
 | Вопрос # 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;beginform2.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)) dobeginForm2.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)) dobeginForm2.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 beginarad := 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??? |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |