Learn R Programming

Morpho (version 2.12)

equidistantCurve: make a curve equidistant (optionally up/downsampling)

Description

make a curve equidistant (optionally up/downsampling)

Usage

equidistantCurve(
  x,
  n = NULL,
  open = TRUE,
  subsample = 0,
  increment = 2,
  smoothit = 0,
  mesh = NULL,
  iterations = 1
)

Value

matrix containing equidistantly placed points

Arguments

x

k x m matrix containing the 2D or 3D coordinates

n

integer: number of coordinates to sample. If NULL, the existing curve will be made equidistant.

open

logical: specifies whether the curve is open or closed.

subsample

integer: number of subsamples to draw from curve for interpolation. For curves with < 1000 points, no subsampling is required.

increment

integer: if > 1, the curve is estimated iteratively by incrementing the original points by this factor. The closer this value to 1, the smoother the line but possibly farther away from the control points.

smoothit

integer: smoothing iterations after each step

mesh

specify mesh to project point to

iterations

integer: how many iterations to run equidistancing.

Details

Equidistancy is reached by iteratively deforming (using TPS) a straight line with equidistantly placed points to the target using control points with the same spacing as the actual curve. To avoid singularity, the straight line containes a small amount of noise, which can (optionally) be accounted for by smoothing the line by its neighbours.

Examples

Run this code
if (FALSE) {
data(nose)
x <- shortnose.lm[c(304:323),]
xsample <- equidistantCurve(x,n=50,iterations=10,increment=2)

require(rgl)
points3d(xsample,size=5)
spheres3d(x,col=2,radius=0.3,alpha=0.5)
}

Run the code above in your browser using DataLab