Главная страница
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.015 c
4-1215247210
denissoft
2008-07-05 12:40
2009.08.30
kiFastSystemCallRet


2-1246017930
VoyagerEternal
2009-06-26 16:05
2009.08.30
Как продолжить выполнение программы после искл. ситуации(raise)?


2-1246549168
vslabchenko
2009-07-02 19:39
2009.08.30
Парадокс с ShellExecute


2-1246015956
wordmen
2009-06-26 15:32
2009.08.30
нужно сгенерить дату следующего дня и определенное время


2-1246696231
Gray
2009-07-04 12:30
2009.08.30
Ккак узнать номер выделенной строки в DBGrid?