Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 06.04.2015, 13:51
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Вот это место. Вы вычисляете смещение С ТЕКУЩИМ scale'ом. А масштабирующий scale может отличаться, поскольку является суммой нескольких предыдущих.
// Вычисляю смещение относительно мыши и необходимого положения масштабируемого изображения
    var offsetX = x - x * scale;
    var offsetY = y - y * scale;
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #12 (permalink)  
Старый 06.04.2015, 14:41
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Выложил код тут https://fiddle.sencha.com/#fiddle/kr9
Если не запустится автоматом, то нужно зеленую кнопку жать.
Появится звезда.
Ее можно масштабировать колесиком мыши. Сразу будет видна проблема масштабирования - курсор не совпадает с точкой на фигуре во время масштабирования.

Требуемый код находится в файле app.js на строке 119
Ответить с цитированием
  #13 (permalink)  
Старый 06.04.2015, 14:43
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Сообщение от trikadin Посмотреть сообщение
Вот это место. Вы вычисляете смещение С ТЕКУЩИМ scale'ом. А масштабирующий scale может отличаться, поскольку является суммой нескольких предыдущих.
// Вычисляю смещение относительно мыши и необходимого положения масштабируемого изображения
    var offsetX = x - x * scale;
    var offsetY = y - y * scale;
Я туда уже вставлял сумму предыдущих.

var offsetX = x - x * matrixPrevious.getScaleX();


Ничего путного не выходит.
Ответить с цитированием
  #14 (permalink)  
Старый 06.04.2015, 21:14
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

На языке матриц попробую изложить свою проблему.

У меня есть фигура. Нужно ее масштабировать относительно центра.

У меня есть готовая матрица для масштабирования относительно центра, обозначу ее буквой М1

Фигуру обозначу буквой Ф1

Итого, чтобы масштабировать фигуру мне нужно сделать следующее:

Ф2 = Ф1 * М1

Я получаю новые координаты Ф2

Дело в том, что я эти координаты не сохраняю. Движок отображения работает так: в фигуре хранятся координаты Ф1 и сама матрица М1.

Чтобы мне масштабировать фируру дальше, нужно создать вторую матрицу М2 и сделать следующую операцию

М3 = М1 * М2

Ф3 = Ф1 * М2

Ф3 это координаты фигуры уже послу двух операций масштабирования.

Внимание, проблема. Матрицу масштабирования я без ошибок создаю с учетом, что масштабирование делается относительно определенного центра.

Если я выше описанный цикл операций масштабирования произвожу без смены центра, то все в порядке.

Но если на какой-либо итерации меняется центр, то происходят проблемы (по условиям задачи это требуется). В итоге, получается я неправильно создаю матрицу когда центр меняется.
Ответить с цитированием
  #15 (permalink)  
Старый 08.04.2015, 11:44
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Тема временно закрыта. Оказывается проблема не в моем коде, а в работе SVG.

Дело в том, что если на плоскости есть квадрат, и сделать сначала перенос его таким образом, чтобы ближайший к началу координат угол совпал с началом координат, а затем повернуть, то:

а) в учебниках по матрицам квадрат должен развернуться вокруг начала координат

б) а в SVG он вращается вокруг точки -x, -y (где x, y та точка квадрата что совпала с началом координат после перемещения). То есть точка вращения тоже переместилась!!! Вот отсюда все мои проблемы и исходят. А код похоже верный.

Сейчас читаю спецификацию SVG и пытаюсь понять как это вообще произошло, можно ли это отключить, а если нет, то надо как-то по-другому считать.
Ответить с цитированием
  #16 (permalink)  
Старый 08.04.2015, 13:32
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Продолжение тут http://javascript.ru/forum/showthrea...595#post365595
Ответить с цитированием
  #17 (permalink)  
Старый 08.04.2015, 13:57
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

имхо 1 проблема в логике (т.е. непонимании)
имхо 2 всем будет лень разбираться в чужой логике
не совсем понятно зачем использовать матрицу трансформации для простого маштабирования
Ответить с цитированием
  #18 (permalink)  
Старый 08.04.2015, 21:22
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Я решил проблему. Описание тут http://javascript.ru/forum/offtopic/...tml#post365595

Кому надо будет - тот разберется.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отключить масштабирование перетаскиваемых элементов? danik.js Firefox/Mozilla 2 18.11.2013 17:09
Перемещение объектов, последовательность событий prizrak39 Events/DOM/Window 3 19.11.2012 13:42
Масштабирование изображений по курсору Eugent ExtJS 1 22.03.2012 14:55
Перемещение, вращение, масштабирование div'a den_zm Dojo toolkit 1 13.10.2011 18:41
Grid - roweditor плавное перемещение Jevgeny ExtJS 2 26.10.2010 14:43