![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Масштабирование роликом мыши [D2, D3, D4, D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
BFG9k © (2005-07-28 15:57:00)Нужен алгоритм масштабирования картинки с помощью ролика мыши (например как в автокаде). При прокрутке ролика точка, на которой находится курсор мыши остается неизменной, а вокруг нее изображение увеличивается/уменьшается. То есть осуществляется комбинация масштабирование+смещение(или скроллирование).
BFG9k (2005-08-04 17:29:00) [1]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));
Картинка "скачет" :( Мог быты в моей системе координат обьяснить, что я делаю не так ? Вроде бы тут все просто ...
A22 (2005-07-30 00:28:00) [2]ну, можно 2д реализовать через 3д - тогда все советы подойдут.
а можно высчитать смещение мыши dV = (dx, dy) от левого-верхнего угла картинки, взять его относительно общего размера картинки - dV' = (dx/width, dy/height), потом отмасштабировать картинку и переместить ее так, чтобы левый-верхний угол новой, отмасштабированной картинки находился на расстоянии
dPos = ( new_width * dV'.x, new_heigth * dV'.y ) от мыши.
кажется, так :)
BFG9k (2005-07-29 15:45:00) [3]Речь идет о 2D картинке.
A22 (2005-07-28 19:55:00) [4]а если будет мало - еще и камеру двигай по вектору взгляда
A22 (2005-07-28 19:54:00) [5]попробуй FOV менять по скроллу, может результат устроит
BFG9k (2005-07-28 18:07:00) [6]Угу, сказал. Теперь нужно рассчитать это смещение, чтобы достичь вышеизложенного результата. В этом вопрос.
Jeer (2005-07-28 18:05:00) [7]BFG9k © (28.07.05 15:57)
Так сам же и сказал:
"То есть осуществляется комбинация масштабирование+смещение(или скроллирование)."