Affine
класс сделано как удлинение Transform
класс в JavaFX
.Возможно ли реализовать преобразование перспективы в JavaFX?
Это создает иллюзию, что могут быть некоторые типы преобразований, отличные от аффинных.
ОБНОВЛЕНИЕ
В JavaFX 2.x
Transform
класс содержит только геттеры для конкретных матричных элементов, который включает в себя 12 элементов матрицы 3х4 для 3D-аффинное преобразование. Любое использование класса может основываться только на этих элементах, поэтому любое представленное преобразование является аффинным.
Это означает, что версия 2.x имеет плохую конструкцию, потому что базовый класс может представлять только аффинные преобразования, а Affine
- это подкласс. Это неправильно, так как Affine
должен быть сделан базовым классом.
В JavaFX 8
Transform
класс имеет лучший дизайн. Дополнительно к геттерам он индексировал доступ к матричным элементам и определению matrix type. Также он имеет методы transform()
, которые делают фактическое преобразование.
Это означает, что использование может основываться как на методах transform()
, так и на геттерах матричных элементов.
Если можно гарантировать, что все внутренние части JavaFX
полагаются на методы transform()
, тогда этот класс может быть расширен и может быть реализовано перспективное преобразование. Возможно, он даже может быть реализован в версии версии JavaFX8
.
Вопрос в следующем: может ли быть гарантировано, что JavaFX
полагается только на transform()
методов?
Если я не могу расширить 'Transform' для получения неаффинного преобразования, тогда иерархия классов неверна в JavaFX, правильно? Они должны делать «Affine» в качестве базы, а другие - как потомки. –
Я думаю, что иерархия правильная. В Transform в качестве основы будущая версия (например, Java 9) может расширить Transform с помощью подкласса NonAffineTransform, но если Affine был root, то это не имеет смысла. – jewelsea
Итак, можно расширить 'Transform' до некоторого неаффинного? –