Points along a path
A sequence of 2D, 3D .. nD points is required. There is no limit on the number of coordinate dimensions. The first coordinate of each point become the abcissae (e.g. the x
coordinate values). The second [, third etc.] become [successive] ordinates (e.g. the ys
, zs
...).
Every point in a givne sequence must has the same number of constiuent coordinates. Coordinates are considered to be values along orthonormal axes. All ordinate axes are fitted with respect to the same abcissae. So, the arcs that connect successive y
s are arcs hewn from a succession of (x_i, y_i)
ordered pairs and the arcs connecting successive z
s are arcs hewn from a succession of (x_i, z_i)
ordered pairs. It is easy to work with other axial pairings. To generate arcs using the sequence of (y_i, z_i)
pairs: ys_zs = catmullrom( collect(zip(ys, zs)) )
.
The point sequence itself may be provided as a vector of points or as a tuple of points.
Type used for a Point | example | coordinates are retrievable | you support |
---|---|---|---|
small vector | [1.0, 3.5 ] | coord(point, i) = point[i] | builtin |
small tuple | (1.0, 3.5) | coord(point, i) = point[i] | builtin |
StaticVector | SVector( 1.0, 3.5 ) | coord(point, i) = point[i] | builtin |
NamedTuple | (x = 1.0, y = 3.5 ) | coord(point, i) = point[i] | builtin |
struct | Point(1.0, 3.5) | coord(point, i) = point[i] | getindex |
struct Point{T}
x::T
y::T
z::T
end
function Base.getindex(point::Point{T}, i::Integer) where T
if i == 1
point.x
elseif i == 2
point.y
elseif i == 3
point.z
else
throw(DomainError("i must be 1, 2, or 3 (not $i)"))
end
end