Tomsk Sysadmins Forum

Windows => Программирование => Topic started by: maximus on March 15, 2007, 00:04:25

Title: Начертить график в BDS2006
Post by: maximus on March 15, 2007, 00:04:25
В общем-то всё просто. Нужно через цикл с изменением параметра t и MoveTo/LineTo нарисовать график функции, заданой параметрически: x=3*cos(t); y=3*sin(t); t=[0..2*pi]
   
         x0=PaintBox->Width/2;
   y0=PaintBox->Height/2;
   x=x0;y=y0;
   for(t = 0; t<6.28 ; t+=0.01)  {
      PaintBox->Canvas->MoveTo(x,y);
          x=3*cos(t);
          y=3*sin(t);
      PaintBox->Canvas->LineTo(x,y); }
Вот такой код написал, вроде должен работать, аннет. Может кто-нибудь подскажет, где я накосячил?
Title: Начертить график в BDS2006
Post by: maximus on March 15, 2007, 10:18:35
Cправился
Title: Начертить график в BDS2006
Post by: John_84 on March 15, 2007, 18:45:12
Quote from: maximus
Cправился

Ну и в чем дело было?

Кстати, может знаешь что делать с таким косяком: Берешь Image1->Canvas, рисуешь там, затем расширяешь форму вместе с Image1, снова берешь Canvas, а рисуется только там, где он был взят в прошлый раз.

P.S. Максимус - в честь гладиатора МАксимуса или от слова Максим (МаксИмус)? =)))
Title: Начертить график в BDS2006
Post by: maximus on March 15, 2007, 21:38:53
LineTo/MoveTo(x+x0,y+y0); нада было я координаты центра paintboxa не указал(х0,у0), а эту строку убрать  x=x0;y=y0;

А у тебя координаты пересчитываются после изменения?

P.S.
и от того и от другого сразу
Title: Начертить график в BDS2006
Post by: John_84 on March 17, 2007, 17:07:10
Да, программа все персчитывает. размеры прямоугольника для рисования берутся из imgGraph. Ну, то есть высота и ширина. Он сам расширяется -- проверено. выглядит результат так: белый прямоугольник, в котором кусок рисунка, а вокруг всё серое =(. Я думаю, там надо как-то старый канвас дропать...
Title: Начертить график в BDS2006
Post by: John_84 on April 22, 2007, 13:33:41
Если кому интересно, то дело было в том, что с компонентом TImage сопоставляется растровое изображение, которое просто так не заресайзишь. Чтобы начать рисовать всё заново, нужно сначала убить старое изображение:
Code: [Select]
img->Picture = NULL;После этого можно рисовать всё заново и всё работает)