Главная страница
    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
3-1131965881
alex-ran
2005-11-14 13:58
2006.01.08
FastReport: CrossView и значение CellMemoCross1


14-1134588021
Гарри Поттер
2005-12-14 22:20
2006.01.08
WinInstall софтина из Win2000


14-1134386643
Mike Kouzmine
2005-12-12 14:24
2006.01.08
Путин начинает рабочую неделю в Чечне.


14-1134461801
Kutuzov47
2005-12-13 11:16
2006.01.08
Структурирование


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





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