Справка по API
Преобразования
#
CoordinateTransformations.Transformation — Type
Супертип Transformation определяет простой интерфейс для выполнения преобразований. Подтипы должны иметь возможность применять преобразование системы координат к правильным типам данных путем перегрузки метода вызова, и для них обычно определено соответствующее обратное преобразование посредством Base.inv(). Дополнительно могут быть определены эффективные композиции посредством compose() (эквивалентно ∘).
#
CoordinateTransformations.ComposedTransformation — Type
ComposedTransformation просто выполняет два преобразования по очереди и является резервным типом выходных данных для compose().
#
CoordinateTransformations.IdentityTransformation — Type
IdentityTransformation — это одинарный объект Transformation, который возвращает входные данные без изменений, так же как identity.
#
CoordinateTransformations.PerspectiveMap — Type
PerspectiveMap()
Создает преобразование проецирования. Преобразование проецирования «проецирует», например, точку в трехмерном пространстве на двухмерный виртуальный экран идеальной камеры-обскуры (на расстоянии 1 от камеры). Камера ориентирована по положительной оси Z (или в общем случае вдоль конечного измерения), и для объектов перед камерой сохраняется знак компонентов x и y (объекты позади камеры также проецируются и, следовательно, переворачиваются — пользователь может при необходимости отбросить их).
Это преобразование предназначено для использования в сочетании с другими преобразованиями координат для определения, например, положения и ориентации камеры. Пример:
cam_transform = PerspectiveMap() ∘ inv(AffineMap(cam_rotation, cam_position)) screen_points = map(cam_transform, points)
(См. также описание cameramap.)
#
CoordinateTransformations.cameramap — Function
cameramap()
cameramap(scale)
cameramap(scale, offset)
Создает преобразование, которое проецирует точки в реальном пространстве (например, трехмерном) посредством преобразования проецирования на фокальную плоскость идеальной камеры (камеры-обскуры) с заданными свойствами.
scale задает масштаб экрана. Для стандартной цифровой камеры масштаб будет равен scale = focal_length / pixel_size. Неквадратные пиксели поддерживаются путем предоставления пары масштабов в кортеже, scale = (scale_x, scale_y). Положительные масштабы соответствуют камере, обращенной в сторону оси +z, с виртуальным экраном перед камерой (координаты x, y не инвертируются относительно трехмерного пространства). Обратите внимание, что точки за камерой (с отрицательной компонентой z) будут проецироваться (и инвертироваться) на координаты изображения, и пользователь может при необходимости самостоятельно отбросить такие точки.
offset = (offset_x, offset_y) служит для определения начала координат на плоскости изображения. Например, точка (0,0) может представлять левый верхний угол датчика изображения. Это измерение выполняется в единицах после применения scale (например, в пикселях).
(См. также описание PerspectiveMap.)
#
CoordinateTransformations.compose — Function
compose(trans1, trans2)
trans1 ∘ trans2
Создает новое преобразование, которое эквивалентно последовательному применению к координате сначала преобразования trans2, а затем trans1. По умолчанию создается ComposedTransformation, однако этот метод можно перегрузить для повышения эффективности (например, два аффинных преобразования естественным образом составляют одно аффинное преобразование).
#
CoordinateTransformations.recenter — Function
recenter(trans::Union{AbstractMatrix,Transformation}, origin::Union{AbstractVector, Tuple}) -> ctrans
Возвращает новое преобразование ctrans такое, что точка origin служит началом координат для trans. Преобразование на ±origin происходит как до, так и после применения trans, так что при линейном trans верно следующее.
ctrans(origin) == origin
Как следствие, recenter имеет смысл только в том случае, если выходное пространство trans изоморфно входному.
Например, если trans — это матрица поворота, ctrans поворачивает пространство вокруг origin.
#
CoordinateTransformations.transform_deriv — Function
transform_deriv(trans::Transformation, x)
Матрица, описывающая то, как дифференциалы параметров x передаются на выход преобразования trans.
#
CoordinateTransformations.transform_deriv_params — Function
transform_deriv_params(trans::Transformation, x)
Матрица, описывающая то, как дифференциалы параметров trans передаются на выход преобразования trans при входных данных x.
Аффинные отображения
#
CoordinateTransformations.AbstractAffineMap — Type
abstract type AbstractAffineMap <: Transformation
AbstractAffineMap является супертипом для всех аффинных преобразований, включая линейные преобразования.
#
CoordinateTransformations.AffineMap — Type
AffineMap <: AbstractAffineMap
Конкретное аффинное преобразование. Для построения отображения x -> M*x + v используйте
AffineMap(M, v)
где M — матрица, а v — вектор. Произвольный объект Transformation можно преобразовать в аффинную аппроксимацию путем линеаризации относительно точки x следующим образом:
AffineMap(trans, [x])
Если преобразование уже является аффинным, x можно опустить.
#
CoordinateTransformations.AffineMap — Method
AffineMap(trans::Transformation, x0)
Создает аффинное преобразование, соответствующее дифференциальному преобразованию x0 + dx согласно trans, то есть аффинное преобразование, которое является локально наиболее точным в окрестности x0.
#
CoordinateTransformations.AffineMap — Method
AffineMap(from_points => to_points) → trans
Создает аффинное преобразование, которое приблизительно отображает точки from на точки to. Для отображения n-мерного пространства требуется не менее n+1 невырожденных точек. Если точек больше, преобразование является избыточно определенным и решение вычисляется методом наименьших квадратов.
#
CoordinateTransformations.LinearMap — Type
LinearMap <: AbstractAffineMap
LinearMap(M)
Общее линейное преобразование, созданное с использованием LinearMap(M) для любого матричного объекта M.
#
CoordinateTransformations.Translation — Type
Translation(v) <: AbstractAffineMap
Translation(dx, dy) (2D)
Translation(dx, dy, dz) (3D)
Создает преобразование Translation для смещения декартовых точек на v = (dx, dy, ...).
Двухмерные координаты
#
CoordinateTransformations.Polar — Type
Polar{T,A}(r::T, θ::A) — двухмерные полярные координаты
#
CoordinateTransformations.PolarFromCartesian — Type
PolarFromCartesian() — преобразование вектора AbstractVector длиной 2 в тип Polar
#
CoordinateTransformations.CartesianFromPolar — Type
CartesianFromPolar() — преобразование типа Polar в тип SVector{2}
Трехмерные координаты
#
CoordinateTransformations.Cylindrical — Type
Cylindrical(r, θ, z) — трехмерные цилиндрические координаты
#
CoordinateTransformations.Spherical — Type
Spherical(r, θ, ϕ) — трехмерные сферические координаты
Существует множество соглашений о сферических координатах, и в этой библиотеке используется довольно экзотичное. Для заданного вектора v с декартовыми координатами xyz пусть v_xy = [x,y,0] будет ортогональной проекцией v на плоскость xy.
-
r— это радиус. Он задается посредствомnorm(v, 2). -
θ— это азимут. Это угол между осью x иv_xy. -
ϕ— это широта. Это угол междуv_xyиv.
julia> using CoordinateTransformations
julia> v = randn(3);
julia> sph = SphericalFromCartesian()(v);
julia> r = sph.r; θ=sph.θ; ϕ=sph.ϕ;
julia> v ≈ [r * cos(θ) * cos(ϕ), r * sin(θ) * cos(ϕ), r*sin(ϕ)]
true
#
CoordinateTransformations.CartesianFromCylindrical — Type
CartesianFromCylindrical() — преобразование типа Cylindrical в тип SVector{3}
#
CoordinateTransformations.CartesianFromSpherical — Type
CartesianFromSpherical() — преобразование типа Spherical в тип SVector{3}
#
CoordinateTransformations.CylindricalFromCartesian — Type
CylindricalFromCartesian() — преобразование трехмерной точки в тип Cylindrical
#
CoordinateTransformations.CylindricalFromSpherical — Type
CylindricalFromSpherical() — преобразование типа Spherical в тип Cylindrical
#
CoordinateTransformations.SphericalFromCartesian — Type
SphericalFromCartesian() — преобразование трехмерной точки в тип Spherical
#
CoordinateTransformations.SphericalFromCylindrical — Type
SphericalFromCylindrical() — преобразование типа Cylindrical в тип Spherical