Главная страница
    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.265 c
1-1133786482
TBeginner
2005-12-05 15:41
2006.01.08
Бредовае сохранение форматирования текста


9-1113424295
sergeyshb
2005-04-14 00:31
2006.01.08
Проект "Другой мир"


4-1130759002
Reset
2005-10-31 14:43
2006.01.08
В OLE32.dll есть курсор с именем 2 ...


14-1134270358
Думкин(_врем)
2005-12-11 06:05
2006.01.08
МВо, с Днем рождения!


4-1131079994
msgipss
2005-11-04 07:53
2006.01.08
Функция NtQuerySystemInformation - разве на win2000 не работает ?





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