Главная страница
    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.007 c
5-1120571225
Priest
2005-07-05 17:47
2006.01.08
Количество строк в выпадающем списке св-ва в Objeсе Inspector


14-1134557299
vecna
2005-12-14 13:48
2006.01.08
про Delphi2006


11-1116458973
AK Delfin
2005-05-19 03:29
2006.01.08
Забавная ситуация с TKolImageList.Delete ()


2-1135035793
kizam
2005-12-20 02:43
2006.01.08
картинка на RichEdit-e


14-1134504557
alex-drob
2005-12-13 23:09
2006.01.08
Как воспользоваться функцией





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