AffineTransform и переворачивание оси Y - PullRequest
4 голосов
/ 21 декабря 2010

Я столкнулся со странной проблемой при попытке перевернуть ось Y создаваемой им системы координат:

   private AffineTransform getTransform() {
        if (transform == null) {
            transform = new AffineTransform();
            double scaleX = (double) this.getWidth() / (coordinateSystem.getMaxX() - coordinateSystem.getMinY());
            double scaleY = (double) this.getHeight() / (coordinateSystem.getMaxY() - coordinateSystem.getMinY());
            transform.setToScale(scaleX, scaleY);
            double deltaX = (coordinateSystem.getMaxX() - coordinateSystem.getMinX()) / 2;
            double deltaY = (coordinateSystem.getMaxY() - coordinateSystem.getMinY()) / 2;
            transform.translate(deltaX, deltaY);
        }
        return transform;
    }

AffineTransform настроен на масштабирование и перевод. и все работает нормально, за исключением того, что мои значения y инвертированы (максимальное значение - это низ системы координат, минимальное значение - вверху) Я попытался переключить это путем инвертирования масштабного коэффициента для оси Y. но это не сработало.

Должен ли я позволить Transform вращаться по PI, чтобы достичь перевернутой оси y? Разве умножение масштабного коэффициента для оси у на минус 1 не должно быть одинаковым?

Ответы [ 2 ]

4 голосов
/ 21 декабря 2010

У вас есть опечатка на

double scaleX = (double) this.getWidth() / (coordinateSystem.getMaxX() - coordinateSystem.getMinY());

(Последний Y должен быть X.) Возможно, все.

1 голос
/ 21 декабря 2010

Поворот с помощью PI на самом деле НЕ является правильным решением, поскольку он будет переворачивать ось X и Y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...