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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Витирание графика, проблема - остаются точки 
V
    Опции темы
Sunvas
  Дата 8.4.2006, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Вот есть процедура, которая рисует на канве вращающийся график косинусоиды:

Код

var
  a,ao:word; //а - угол поворота, ао - старый угол поворота
implementation

{.............}
function rotate(t,p:tpoint;angle:integer):tpoint; //Процедура вращающая точку вокруг другой точки на определенное число градусов
begin
  result.x:=trunc((t.x-p.X)*cos(angle*pi/180) - (t.y-p.Y)*sin(-angle*pi/180)+p.X);
  result.y:=trunc((t.y-p.Y)*cos(angle*pi/180) + (t.x-p.X)*sin(-angle*pi/180)+p.y);
end;

procedure TForm1.Timer1Timer(Sender: TObject); //Происходит по таймеру с интервалом 50
var x,y:word;
p:tpoint;
begin
if a>=360 then a:=0; //Чтобы градус был не более 360
inc(a); 

//Стираем прошлое
imm.Canvas.Pen.Mode:=pmnotxor;
if ao<>740 then
for x:=0 to 180 do begin
y:=round(cos(x*pi/30)*40)+100;
p:=rotate(point(x,y),point(120,120),ao);
imm.Canvas.Pixels[p.X,p.Y]:=clblack;
end;

//Рисуем новое
imm.Canvas.Pen.Mode:=pmcopy;
for x:=0 to 180 do begin
y:=round(cos(x*pi/30)*40)+100;
p:=rotate(point(x,y),point(120,120),a);
imm.Canvas.Pixels[p.X,p.Y]:=clblack;
end;

ao:=a;
end;
//imm - это timage.


Вся проблема в том, что на канве остаются какие-то точки от графика, чего быть не должно. Помогите найти прореху.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Poseidon
Дата 8.4.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Установи
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.DoubleBuffered:= True;
end;

иначе будет мерцание.


и стирай не так как ты:
Код

//Стираем прошлое
imm.Canvas.Pen.Mode:=pmnotxor;
if ao<>740 then
for x:=0 to 180 do begin
y:=round(cos(x*pi/30)*40)+100;
p:=rotate(point(x,y),point(120,120),ao);
imm.Canvas.Pixels[p.X,p.Y]:=clblack;
end;



а вот так:
Код

imm.Picture:= nil;

smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Sunvas
Дата 9.4.2006, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Poseidon, спасибо!


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
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.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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