AffineTransform и переворачивание оси Y

Я столкнулся со странной проблемой при попытке перевернуть ось 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. но это не сработало.

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


person fasseg    schedule 21.12.2010    source источник


Ответы (2)


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

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

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

person aioobe    schedule 21.12.2010

Вращение с помощью PI на самом деле не является правильным решением, так как оно перевернет ось X, а также Y.

person ysap    schedule 21.12.2010