Tomsk Sysadmins Forum
Windows => Программирование => Topic started 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); }
Вот такой код написал, вроде должен работать, аннет. Может кто-нибудь подскажет, где я накосячил?
-
Cправился
-
Cправился
Ну и в чем дело было?
Кстати, может знаешь что делать с таким косяком: Берешь Image1->Canvas, рисуешь там, затем расширяешь форму вместе с Image1, снова берешь Canvas, а рисуется только там, где он был взят в прошлый раз.
P.S. Максимус - в честь гладиатора МАксимуса или от слова Максим (МаксИмус)? =)))
-
LineTo/MoveTo(x+x0,y+y0); нада было я координаты центра paintboxa не указал(х0,у0), а эту строку убрать x=x0;y=y0;
А у тебя координаты пересчитываются после изменения?
P.S.
и от того и от другого сразу
-
Да, программа все персчитывает. размеры прямоугольника для рисования берутся из imgGraph. Ну, то есть высота и ширина. Он сам расширяется -- проверено. выглядит результат так: белый прямоугольник, в котором кусок рисунка, а вокруг всё серое =(. Я думаю, там надо как-то старый канвас дропать...
-
Если кому интересно, то дело было в том, что с компонентом TImage сопоставляется растровое изображение, которое просто так не заресайзишь. Чтобы начать рисовать всё заново, нужно сначала убить старое изображение:
img->Picture = NULL;
После этого можно рисовать всё заново и всё работает)