Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.11.2012, 23:15
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
Радость Делфи (графика)

у меня нарисована парабола, и точка движется по ней,по прохождении параболы вслед за точкой исчезает нарисованная парабола,подскажите пожалуйста как можно сделать так чтобы нарисованная парабола оставалась и точка просто проходила и не стирала её

Последний раз редактировалось Mp3, 21.11.2012 в 23:53.
Ответить с цитированием
  #2  
Старый 21.11.2012, 23:31
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Mp3
у меня нарисована парабола, и точка движется по ней,по прохождении параболы вслед за точкой исчезает нарисованная парабола,подскажите пожалуйста как можно сделать так чтобы нарисованная парабола оставалась
Точка которая движется размером 1 пиксель? Как видно, что она движется, она другим цветом?
Ответить с цитированием
  #3  
Старый 21.11.2012, 23:42
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
Радость

да 1 пиксель,да выделена другим цветом
Ответить с цитированием
  #4  
Старый 21.11.2012, 23:44
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Mp3
да 1 пиксель,да выделена другим цветом
Тогда стирай её цветом параболы.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Alegun (22.11.2012)
  #5  
Старый 21.11.2012, 23:50
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
По умолчанию

не совсем понял,это как ?!
Ответить с цитированием
  #6  
Старый 21.11.2012, 23:55
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Mp3
не совсем понял,это как ?!
Ну а как точка движется? Она в новом месте появляется, а в предыдущем месте стирается - получается движение. Вот в старом месте закрашивай её не цветом фона, а цветом параболы.
Ответить с цитированием
  #7  
Старый 21.11.2012, 23:57
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Не проще рисовать всё с нуля? Сначала параболу, потом точку на новом месте.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 22.11.2012, 00:17
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
Радость

спасибо за советы,щас буду пробовать
тема закрыта
Ответить с цитированием
  #9  
Старый 22.11.2012, 21:18
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
По умолчанию

так и не разобрался =(
вот код
Код:
procedure TForm1.onPaint(Sender: TObject);
Var   x_left, x_right,y_up, y_down,n,i:integer;
tau,x,y: real;
begin
x_origin:=Form1.Width div 2;
y_origin:=Form1.Height div 2;
x_left:=round (Form1.Width/20);
x_right:=round (Form1.Width-Form1.Width/20);
y_up:=round (Form1.Height/20);
y_down :=round (Form1.Height-Form1.Height/20);
n:=10;
x_step:=round ((x_right-x_left)/n);
y_step:=round ((y_down - y_up)/n);
with Form1.Canvas do
Begin
MoveTo (x_left, y_origin);
LineTo (x_right, y_origin);
MoveTo (x_origin, y_up);
LineTo (x_origin, y_down);
for  i:=1 to 1000 do
begin
tau:=i/50;
Form1.Canvas.Pixels[round(x_origin+(7*tau*tau+1)*x_step), round(y_origin+(5*tau)*y_step)]:=clBlue;
end;
end;
end;

procedure vector(x0,y0,abs_r:integer;gamma:real) ;
Var alpha:real;
 yk, xk,x1,y1,x2,y2,delta:integer;
begin
with Form1.Canvas do
begin
xk:=round (x0+abs_r*cos(gamma));
yk:=round (y0-abs_r*sin(gamma));
MoveTo (x0,y0);
LineTo (xk,yk);
alpha:=Pi/6;
delta:=10;
x1:=round (xk-delta*(cos(alpha)*cos(gamma)+sin(alpha)*sin(gamma)));
y1:=round (yk+delta*(cos(alpha)*sin(gamma)-sin(alpha)*cos(gamma)));
x2:=round (xk-delta*(cos(alpha)*cos(gamma)-sin(alpha)*sin(gamma)));
y2:=round (yk+delta*(cos(alpha)*sin(gamma)+sin(alpha)*cos(gamma)));
MoveTo(xk,yk);
LineTo(x1,y1);
Moveto(xk,yk);
LineTo(x2,y2);
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
Var i,j,x0,yo:integer;
track: array [1..10000] of Tpoint;
begin
 Label1.Caption:=floattostr(t);
 t:=t+1/1000;
 i:=round (1000*t);
 track[i].x:=round((7*t*t+1)*x_step);
 track[i].y:=round((-5*t)*y_step);
 Form1.Canvas.Pixels[x_origin+track[i].x,y_origin-track[i].y]:=clGreen;
 begin
Form1.Canvas.Pen.Color:=clbtnFace;
Vector(x_origin+track[i-1].x,y_origin-track[i-1].y,abs(round(v_y)),Pi/2);
Form1.Canvas.Pen.Color:=clBlack;
Vector(x_origin+track[i].x,y_origin-track[i].y,abs(round(v_y)),Pi/2);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
t:=0;
Form1.Timer1.Enabled:=true;
end;

end.

если укажите в чем ошибка буду очень благодарен
вопрос тот же

Последний раз редактировалось Mp3, 22.11.2012 в 23:39.
Ответить с цитированием
  #10  
Старый 22.11.2012, 21:54
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Код очень "грязный". Я одного не пойму, зачем отрисовка размазана по 3 процедурам? Таймер, в идеале, должент только дёргать OnPaint, в котором и происходит ВСЯ отрисовка.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 22.11.2012, 22:14
Аватар для Mp3
Mp3 Mp3 вне форума
Новичок
 
Регистрация: 05.03.2012
Сообщения: 82
Репутация: 10
По умолчанию

что- то не представляю как это должно выглядеть...а таймер и дергает же paint начинается отрисовка по времени
Ответить с цитированием
  #12  
Старый 23.11.2012, 05:23
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Mp3
что- то не представляю как это должно выглядеть...а таймер и дергает же paint начинается отрисовка по времени
Как минимум в самом начале обработчика события таймера добавь "Repaint;"
Ещё убери затирание стрелочки (вектора) вместе с бесполезным массивом.
А также перенеси всё рисование из обработчика таймера в обработчик "TForm1.onPaint". А когда это сделаешь - можешь убрать в начале обработчика таймера "Repaint;" и поставить вместо этого в конце "Invalidate;"

По поводу процедуры "vector": Если она у тебя предназначена для рисования только на "TForm1", то сделай её методом этого класса. Если же нужно чтобы она рисовала на любой канве, то оставь её обычной процедурой, но добавь в параметры "Canvas: TCanvas" и рисуй на этой канве. А то сейчас процедура "vector" у тебя ни то ни сё
И поубирай бесполезные упоминания переменной "Form1".
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:35.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025