Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.30;
Скачать: CL | DM;

Вниз

Алгоритм перемещения курсора мыши   Найти похожие ветки 

 
worldmen   (2009-06-30 13:13) [0]

Мне нужно перемещать плавно курсор мыши. Кликать и ставить курсор в нужное место получается, но надо чтоб он в это место плавно перемещался. Если только по вертикали или горизонтали это легко.
А есть алгоритм чтоб по диагонали можно было?


 
clickmaker ©   (2009-06-30 13:16) [1]

> чтоб по диагонали можно было?

то есть либо x, либо у менять уже умеем, а сразу оба - нет?


 
Palladin ©   (2009-06-30 13:16) [2]

господи...


 
Anatoly Podgoretsky ©   (2009-06-30 13:28) [3]

К черту


 
wordmen   (2009-06-30 13:44) [4]


> то есть либо x, либо у менять уже умеем, а сразу оба - нет?

Если так, то плучится перемещение сразу по вертикали (или горизонтали) а потом по горизонтали, т.е. по квадратам ходить.
А чтоб сразу по диагонали надо разбивать на отрезки в зависимости длины и ширины.
Идеально конечно перемещать из точки (10, 10) в точку (100, 100) - по однопу пикселю за шаг по вертикали и горизонтали, а если надо переместить в (150,300) то надо делить на отрезки и как-то правильно оприращивать и округлять


 
clickmaker ©   (2009-06-30 13:45) [5]

> если надо переместить в (150,300)

алгоритм Брезенхейма для рисования линий посмотри


 
Palladin ©   (2009-06-30 13:49) [6]


> то надо делить на отрезки и как-то правильно оприращивать
> и округлять

угу, используя математику начальных классов


 
Anatoly Podgoretsky ©   (2009-06-30 13:52) [7]

> clickmaker  (30.06.2009 13:45:05)  [5]

LineDDA именно этот алгоритм и реализует.


 
И. Павел   (2009-06-30 20:53) [8]


> то надо делить на отрезки и как-то правильно оприращивать
> и округлять


Из уравнения линии по двум точкам получается так:

procedure TForm1.Button1Click(Sender: TObject);
var i, y, x, y1, y2, x1, x2:integer;
begin
 x1:=10;
 y1:=10;
 x2:=300;
 y2:=200;
 for i:=1 to 100 do
 Begin
   y:=y1+(y2-y1)*i div 100;
   x:=x2+(y-y2)*(x1-x2) div (y1-y2);
   Button1.Top:=y;
   Button1.Left:=x;
   Refresh;
   Sleep(10);
 end;
end;


 
wordmen   (2009-07-01 11:20) [9]

СПАСИБО, ОТЛИЧНО РАБОТАЕТ.
А то по алгоритму Брезенхема все равно по одной линии (по диагонали в 45 градусов) идет


 
Anatoly Podgoretsky ©   (2009-07-01 11:26) [10]

Вот взял и опустил Брезенхема.



Страницы: 1 вся ветка

Текущий архив: 2009.08.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
15-1246520770
oxffff
2009-07-02 11:46
2009.08.30
Анонимные методы баг компилятора


10-1158414306
AAAA
2006-09-16 17:45
2009.08.30
TDCOMConnection. Создал


2-1246461858
Zheksonz
2009-07-01 19:24
2009.08.30
strn:=#01#06#00#04#19#136;


2-1246031571
rus
2009-06-26 19:52
2009.08.30
запрос в firebrid


15-1246260569
d@nger
2009-06-29 11:29
2009.08.30
Хост принудительно разрывает соединение....