Справка по API
Преобразования
#
CoordinateTransformations.Transformation
— Type
Супертип Transformation
определяет простой интерфейс для выполнения преобразований. Подтипы должны иметь возможность применять преобразование системы координат к правильным типам данных путем перегрузки метода вызова, и для них обычно определено соответствующее обратное преобразование посредством Base.inv()
. Дополнительно могут быть определены эффективные композиции посредством compose()
(эквивалентно ∘
).
#
CoordinateTransformations.ComposedTransformation
— Type
ComposedTransformation
просто выполняет два преобразования по очереди и является резервным типом выходных данных для compose()
.
#
CoordinateTransformations.IdentityTransformation
— Type
IdentityTransformation
— это одинарный объект Transformation
, который возвращает входные данные без изменений, так же как identity
.
#
CoordinateTransformations.PerspectiveMap
— Type
PerspectiveMap()
julia
Создает преобразование проецирования. Преобразование проецирования «проецирует», например, точку в трехмерном пространстве на двухмерный виртуальный экран идеальной камеры-обскуры (на расстоянии 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)
julia
Создает преобразование, которое проецирует точки в реальном пространстве (например, трехмерном) посредством преобразования проецирования на фокальную плоскость идеальной камеры (камеры-обскуры) с заданными свойствами.
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
julia
Создает новое преобразование, которое эквивалентно последовательному применению к координате сначала преобразования trans2
, а затем trans1
. По умолчанию создается ComposedTransformation
, однако этот метод можно перегрузить для повышения эффективности (например, два аффинных преобразования естественным образом составляют одно аффинное преобразование).
#
CoordinateTransformations.recenter
— Function
recenter(trans::Union{AbstractMatrix,Transformation}, origin::Union{AbstractVector, Tuple}) -> ctrans
julia
Возвращает новое преобразование ctrans
такое, что точка origin
служит началом координат для trans
. Преобразование на ±origin
происходит как до, так и после применения trans
, так что при линейном trans
верно следующее.
ctrans(origin) == origin
Как следствие, recenter
имеет смысл только в том случае, если выходное пространство trans
изоморфно входному.
Например, если trans
— это матрица поворота, ctrans
поворачивает пространство вокруг origin
.
#
CoordinateTransformations.transform_deriv
— Function
transform_deriv(trans::Transformation, x)
julia
Матрица, описывающая то, как дифференциалы параметров x
передаются на выход преобразования trans
.
#
CoordinateTransformations.transform_deriv_params
— Function
transform_deriv_params(trans::Transformation, x)
julia
Матрица, описывающая то, как дифференциалы параметров trans
передаются на выход преобразования trans
при входных данных x
.
Аффинные отображения
#
CoordinateTransformations.AbstractAffineMap
— Type
abstract type AbstractAffineMap <: Transformation
julia
AbstractAffineMap
является супертипом для всех аффинных преобразований, включая линейные преобразования.
#
CoordinateTransformations.AffineMap
— Type
AffineMap <: AbstractAffineMap
julia
Конкретное аффинное преобразование. Для построения отображения x -> M*x + v
используйте
AffineMap(M, v)
где M
— матрица, а v
— вектор. Произвольный объект Transformation
можно преобразовать в аффинную аппроксимацию путем линеаризации относительно точки x
следующим образом:
AffineMap(trans, [x])
Если преобразование уже является аффинным, x
можно опустить.
#
CoordinateTransformations.AffineMap
— Method
AffineMap(trans::Transformation, x0)
julia
Создает аффинное преобразование, соответствующее дифференциальному преобразованию x0 + dx
согласно trans
, то есть аффинное преобразование, которое является локально наиболее точным в окрестности x0
.
#
CoordinateTransformations.AffineMap
— Method
AffineMap(from_points => to_points) → trans
julia
Создает аффинное преобразование, которое приблизительно отображает точки from
на точки to
. Для отображения n
-мерного пространства требуется не менее n+1
невырожденных точек. Если точек больше, преобразование является избыточно определенным и решение вычисляется методом наименьших квадратов.
#
CoordinateTransformations.LinearMap
— Type
LinearMap <: AbstractAffineMap LinearMap(M)
julia
Общее линейное преобразование, созданное с использованием LinearMap(M)
для любого матричного объекта M
.
#
CoordinateTransformations.Translation
— Type
Translation(v) <: AbstractAffineMap
Translation(dx, dy) (2D)
Translation(dx, dy, dz) (3D)
julia
Создает преобразование 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
julia-repl
#
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