Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с порядком вызова процедур 
V
    Опции темы
AntonPavlov
Дата 14.9.2011, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 28.5.2010

Репутация: нет
Всего: нет



Нужно написать программу, вычерчивающую график астроиды. Вот, собственно код:

Код

var
 cx,cy:integer;
 dX,dY:real;

function TfrmGraph.X1(b,alpha:real):real;
begin
 X1:=b*(cos(alpha/4)*cos(alpha/4)*cos(alpha/4));
end;

function TfrmGraph.Y1(b,alpha:real):real;
begin
 Y1:=b*(sin(alpha/4)*sin(alpha/4)*sin(alpha/4));
end;

procedure TfrmGraph.Astroid;
const Step = 0.01;
var XX,YY,x,y:real;
 a,b:real;
 alpha:real;
 k:real;
begin
 a:=0;
 b:=1440/180*pi;
 alpha:=a;
 XX:=Abs(X1(k,a));
 YY := Abs(Y1(k,a));
 alpha:=a;
 repeat
 if YY < Abs(Y1(k,alpha)) then YY := Abs(Y1(k,alpha));
 alpha:=alpha+0.01;
 until alpha>=b;
 dX := imgGraph.Height/2.2 / XX;
 dY := imgGraph.Width/2.2 / YY;
 alpha:=a;
 y := Y1(k,alpha);
 x := X1(k,alpha);
 imgGraph.Canvas.MoveTo(cx + Round(dX * x ),cy - Round(dY * y ));
 alpha:=a+0.01;
 imgGraph.Canvas.Pen.Color:=clGreen;
 imgGraph.Canvas.Pen.Width:=3;
 Repeat
 y := Y1(k,alpha);
 x := X1(k,alpha);
 imgGraph.Canvas.Lineto(Round(cx + (dX * x )), Round(cy - (dY * y )));
 alpha := alpha + 0.01;
 Until alpha > b;
end;

procedure TfrmGraph.CoordGrid;
begin
 imgGraph.Canvas.Pen.Width:=1;
 imgGraph.Canvas.Pen.Color:=clRed;
 imgGraph.Canvas.MoveTo(0,cx);
 imgGraph.Canvas.LineTo(imgGraph.Width,cx);
 imgGraph.Canvas.MoveTo(cy,0);
 imgGraph.Canvas.LineTo(cy,imgGraph.Height);
 imgGraph.Canvas.Font.Size:=8;
 imgGraph.Canvas.Font.Style:=[fsBold];
 imgGraph.Canvas.Brush.Color:=clWhite;
 imgGraph.Canvas.TextOut(485,cy-30,'X');
 imgGraph.Canvas.TextOut(cx-25,5,'Y');
 imgGraph.Canvas.Brush.Color:=clBlack;
end;

procedure TfrmGraph.FormCreate(Sender: TObject);
begin
 cx:=round(imgGraph.Width/2);
 cy:=round(imgGraph.Height/2);
 Astroid;
 CoordGrid;
end;
end.


Проблема в том, что если в FormCreate первой вызывать процедуру рисования осей - CoordGrid, а потом уже выводить график - то возникает ошибка Floating Point Overflow. Никак не могу понять, в чем же дело....подскажите, а?

Это сообщение отредактировал(а) AntonPavlov - 14.9.2011, 19:11
PM MAIL   Вверх
Snowy
Дата 14.9.2011, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Проблема не в очередности, а в том, что у тебя k не инициализирована.
Просто при разном порядке функций значение у нее разное, что вызывает разные ошибки, либо не вызывает...
Вобщем поведение программы будет непредсказуемо, если использовать переменные, значение которых явно не определено.

Добавлено через 1 минуту и 1 секунду
Зато alpha:=a; у тебя аж 2 раза
PM MAIL   Вверх
AntonPavlov
Дата 14.9.2011, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 28.5.2010

Репутация: нет
Всего: нет



аааа, точно, спасибо! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.