Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
15-1246451106
@!!ex
2009-07-01 16:25
2009.08.30
ЗИЛ в Германии 45 года????


15-1246307568
Юрий
2009-06-30 00:32
2009.08.30
С днем рождения ! 30 июня 2009 вторник


2-1246197040
@!!ex
2009-06-28 17:50
2009.08.30
TIdUDPServer обарбатывает сообщения только при выходе


2-1246352665
Цукор5
2009-06-30 13:04
2009.08.30
Сокеты. Заполнение структуры адреса сервера


2-1246452586
student_91
2009-07-01 16:49
2009.08.30
Canvas





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский