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

Вниз

Масштабирование роликом мыши   Найти похожие ветки 

 
BFG9k ©   (2005-07-28 15:57) [0]

Нужен алгоритм масштабирования картинки с помощью ролика мыши (например как в автокаде). При прокрутке ролика точка, на которой находится курсор мыши остается неизменной, а вокруг нее изображение увеличивается/уменьшается. То есть осуществляется комбинация масштабирование+смещение(или скроллирование).


 
Jeer ©   (2005-07-28 18:05) [1]

BFG9k ©   (28.07.05 15:57)

Так сам же и сказал:
"То есть осуществляется комбинация масштабирование+смещение(или скроллирование)."


 
BFG9k ©   (2005-07-28 18:07) [2]

Угу, сказал. Теперь нужно рассчитать это смещение, чтобы достичь вышеизложенного результата. В этом вопрос.


 
A22 ©   (2005-07-28 19:54) [3]

попробуй FOV менять по скроллу, может результат устроит


 
A22 ©   (2005-07-28 19:55) [4]

а если будет мало - еще и камеру двигай по вектору взгляда


 
BFG9k ©   (2005-07-29 15:45) [5]

Речь идет о 2D картинке.


 
A22 ©   (2005-07-30 00:28) [6]

ну, можно 2д реализовать через 3д - тогда все советы подойдут.

а можно высчитать смещение мыши dV = (dx, dy) от левого-верхнего угла картинки, взять его относительно общего размера картинки -  dV" = (dx/width, dy/height), потом отмасштабировать картинку и переместить ее так, чтобы левый-верхний угол новой, отмасштабированной картинки находился на расстоянии
dPos = ( new_width * dV".x, new_heigth * dV".y ) от мыши.
кажется, так :)


 
BFG9k ©   (2005-08-04 17:29) [7]

2 A22:

Не совсем понимаю твой алгоритм. Я делаю так (перемещается и масштабируется форма Form2):


//масштаб
  sc:=1+Sign(WheelDelta)*WHEEL_SPEED;

//координаты нажатия мыши в системе координат Form2
  x1:=MousePos.X-Form2.Left;
  y1:=MousePos.Y-Form2.Top;

//...и где будет эта точка после масштабирования  
  x2:=x1*sc;
  y2:=y1*sc;

//расстоияние, на которое нужно потом сместить картинку, чтобы
//эти точки совпали
  dX:=x2-x1;
  dY:=y2-y1;

//смещаем и масштабируем
  Form2.SetBounds(Round(Form2.Left-dX),Round(Form2.Top-dY),
    Round(Width*sc),Round(Height*sc));


Картинка "скачет" :( Мог быты в моей системе координат обьяснить, что я делаю не так ? Вроде бы тут все просто ...



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

Форум: "Media";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
8-1122992576
Mr.F
2005-08-02 18:22
2006.01.08
3DMAX==>Delphi


4-1131041824
spyrytus
2005-11-03 21:17
2006.01.08
Как написать драйвер с помощью DDK под WinNT ?


5-1120679553
SpyBoy
2005-07-06 23:52
2006.01.08
Разбиение ListBox а


1-1133951543
Electric
2005-12-07 13:32
2006.01.08
как правильно и быстро просканировать пиксели


2-1135153090
Barsky
2005-12-21 11:18
2006.01.08
Сортировка в запросе (ORDER)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский