Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
2-1135240151
Вт
2005-12-22 11:29
2006.01.08
Виртуальный диск в памяти


2-1135114470
Gena
2005-12-21 00:34
2006.01.08
Прошу помочь очень хочется из Delphi7 запустить мастера печати


14-1134585040
Igorek
2005-12-14 21:30
2006.01.08
Ретрансляция интернет радиостанций по локалке


1-1133936384
KvORubin
2005-12-07 09:19
2006.01.08
Как в МЕМО1 в первой строке


9-1122796427
Зм1й
2005-07-31 11:53
2006.01.08
Почему может не работать CallList?