Масштабирование относительно положения мыши в java-компоненте - PullRequest
1 голос
/ 08 июля 2011

Я работал над приложением для рисования с использованием 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, которые я не знаю, и у меня возникли проблемы, пытаясь следовать.Любая помощь будет оценена.

...