@@ -47,7 +47,29 @@ function CartesianPoint{T}(;
4747 CartesianPoint {T} (T (x),T (y),T (z))
4848end
4949
50- zero (PT:: Type{<:AbstractCoordinatePoint{T}} ) where {T} = PT (zero (T),zero (T),zero (T))
50+ function Base. convert (:: Type{CartesianPoint{T}} , pt:: CartesianPoint{U} ) where {T,U}
51+ return CartesianPoint {T} (convert (T, pt. x), convert (T, pt. y), convert (T, pt. z))
52+ end
53+
54+
55+ Base.:(== )(a:: CartesianPoint , b:: CartesianPoint ) = a. x == b. x && a. y == b. y && a. z == b. z
56+
57+ function Base. isapprox (a:: CartesianPoint , b:: CartesianPoint ; kwargs... )
58+ return isapprox (a. x, b. x; kwargs... ) && isapprox (a. y, b. y; kwargs... ) && isapprox (a. z, b. z; kwargs... )
59+ end
60+
61+
62+ @inline Base.:(+ )(pt:: CartesianPoint , v:: CartesianVector ) = CartesianPoint (pt. x + v. x, pt. y + v. y, pt. z + v. z)
63+ @inline Base.:(- )(pt:: CartesianPoint , v:: CartesianVector ) = CartesianPoint (pt. x - v. x, pt. y - v. y, pt. z - v. z)
64+ @inline Base.:(- )(a:: CartesianPoint , b:: CartesianPoint ) = CartesianVector (a. x - b. x, a. y - b. y, a. z - b. z)
65+
66+
67+ Base.:(* )(A:: StaticMatrix{3,3} , pt:: CartesianPoint ) = _ascartpoint (A * _asvector (pt))
68+
69+ @inline _asvector (pt:: CartesianPoint{T} ) where {T} = SVector (pt. x, pt. y, pt. z)
70+ @inline _ascartpoint (v:: StaticVector{3} ) = CartesianPoint (v[1 ], v[2 ], v[3 ])
71+
72+
5173
5274"""
5375 struct CylindricalPoint{T} <: AbstractCoordinatePoint{T, Cylindrical}
109131@inline _convert_point (pt:: AbstractCoordinatePoint , :: Type{Cylindrical} ) = CylindricalPoint (pt)
110132@inline _convert_point (pt:: AbstractCoordinatePoint , :: Type{Cartesian} ) = CartesianPoint (pt)
111133
134+
135+ function Base. convert (:: Type{CylindricalPoint{T}} , pt:: CylindricalPoint{U} ) where {T,U}
136+ return CylindricalPoint {T} (convert (T, pt. r), convert (T, pt. φ), convert (T, pt. z))
137+ end
138+
139+
140+ Base.:(== )(a:: CylindricalPoint , b:: CylindricalPoint ) = a. r == b. r && a. φ == b. φ && a. z == b. z
141+
142+ function Base. isapprox (a:: CylindricalPoint , b:: CylindricalPoint ; kwargs... )
143+ return isapprox (a. r, b. r; kwargs... ) && isapprox (a. φ, b. φ; kwargs... ) && isapprox (a. z, b. z; kwargs... )
144+ end
145+
146+
147+ @inline Base.:(+ )(pt:: CylindricalPoint , v:: CylindricalVector ) = CylindricalPoint (pt. r + v. r, pt. φ + v. φ, pt. z + v. z)
148+
149+ @inline Base.:(- )(pt:: CylindricalPoint , v:: CylindricalVector ) = CylindricalPoint (pt. r - v. r, pt. φ - v. φ, pt. z - v. z)
150+
151+ @inline Base.:(- )(a:: CylindricalPoint , b:: CylindricalPoint ) = CylindricalVector (a. r - b. r, a. φ - b. φ, a. z - b. z)
152+
153+
112154# function _Δφ(φ1::T, φ2::T)::T where {T}
113155# δφ = mod(φ2 - φ1, T(2π))
114156# min(δφ, T(2π) - δφ)
0 commit comments