2016-12-14 5 views
2

У меня есть JPanel, в котором я рисую треугольники по методу drawPolygon. Моя цель - вращать графику вокруг оси X. Я знаю, что существует метод rotate, но этот метод вращается только вокруг оси Z.Графика (2D) Вращение: Повернуть ось x

Как я могу повернуть графику в JPanel вокруг оси X?

Example of rotation

Если Графика 2D библиотека не имеет функций, чтобы сделать этот вид вращения, скажите, пожалуйста, как я могу заархивировать свою цель иначе. Я не против переходить на другой тип графического интерфейса, например Java-fx или canvas. (Но пребывание в Java)

+0

* «Как повернуть графику в« JPanel »вокруг оси X?» * Вы хотите отразить ее, как если бы она начиналась над осью X, а затем перевернулась вверх и вниз по оси X? Если это так, то соответствующее масштабирование 'AffineTransform' должно сделать это. –

+0

@AndrewThompson Я не хочу отражать его на оси X, поэтому не масштабируется. Вот что я вижу (визуализация) (https://youtu.be/IKB1hWWedMk?t=8m40s). – NoSenseSenpai

+0

Не следует за ссылкой на видео. Получите скриншот или сделайте рисунок того, что вы имеете в виду. –

ответ

3

Java 2D обеспечивает AffineTransform, но affine transformation гарантирует, что параллельные линии остаются параллельными после преобразования. В качестве альтернативы рассмотрим JavaFX 3D, который предоставляет PerspectiveCamera для ; этот комплект example использует Rotate.Y_AXIS, но Rotate.X_AXIS произведет желаемый эффект. Также рассмотрите Java Advanced Imaging Warp, процитированный here, который предлагает WarpPerspective с PerspectiveTransform.

+0

* «Аффинное преобразование требует, чтобы параллельные линии оставались параллельными после трансформации». * Я всегда задавался вопросом о формулировке документов по этому вопросу (что предлагало мне то же самое, но я не был уверен). Жаль, учитывая, что я хотел использовать преобразование, чтобы превратить «плоскую» карту мира (как можно видеть в [этом ответе] (http://stackoverflow.com/a/18825844/418556)) в глобус. Но единственный способ, которым я мог бы думать, добиться этого, используя ядро ​​Java, - это преобразование. Не повезло! –

+1

@AndrewThompson: Может быть, «PerspectiveTransform», процитированное выше, но я не уверен, что у Mercator есть инверсия. Кроме того, мне не понравилось слово «_requires_». – trashgod

+0

См. Также ['javafx.scene.effect.PerspectiveTransform'] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/effect/PerspectiveTransform.html) – trashgod

Смежные вопросы