Я работал над приложением для рисования с использованием Java.Область рисования является j-компонентом, который я хотел бы иметь возможность перемещать аналогично cadd (панорамирование, увеличение / уменьшение и т. Д.).Часть, с которой у меня были проблемы, - это попытка увеличения относительно положения мыши.Я попытался перевести начало координат в положение мыши, масштабировать, перевести обратно;это приближает меня к тому, что я хочу, но экран слишком сильно подпрыгивает, и он не очень плавный.Я просто не могу понять математику о расчете новой позиции для перевода обратно.Моя функция масштабирования до сих пор выглядит так (любая переменная с d_, которую вы можете предположить, является членом данных jcomponent):
private void changeZoom(int steps) {
Point2D.Float cursorScreen = d_mouseData.getCurrentPointInScreen();
final double FACTOR = Math.sqrt(Math.sqrt(2));
for (int i = 1; i <= steps; i++)
d_fScale *= FACTOR;
for (int i = 1; i <= -steps; i++)
d_fScale /= FACTOR;
d_fScale = (float)Math.max(0.2, d_fScale);
d_newPoint.x = cursorScreen.x + (cursorScreen.x - d_newPoint.x) / d_fScale;
d_newPoint.y = cursorScreen.y + (cursorScreen.y - d_newPoint.y) / d_fScale;
d_scaleMatrix.setToTranslation(d_newPoint.x, d_newPoint.y);
d_scaleMatrix.scale(d_fScale, d_fScale);
d_scaleMatrix.translate(-cursorScreen.x, -cursorScreen.y);
repaint();
}
Я видел несколько сообщений на этом сайте об этом, но они, кажется,все будут в javascript и css, которые я не знаю, и у меня возникли проблемы, пытаясь следовать.Любая помощь будет оценена.