spatstat (version 1.63-0)

project2segment: Move Point To Nearest Line

Description

Given a point pattern and a line segment pattern, this function moves each point to the closest location on a line segment.

Usage

project2segment(X, Y)

Arguments

X

A point pattern (object of class "ppp").

Y

A line segment pattern (object of class "psp").

Value

A list with the following components. Each component has length equal to the number of points in X, and its entries correspond to the points of X.

Xproj

Point pattern (object of class "ppp" containing the projected points.

mapXY

Integer vector identifying the nearest segment to each point.

d

Numeric vector of distances from each point of X to the corresponding projected point.

tp

Numeric vector giving the scaled parametric coordinate \(0 \le t_p \le 1\) of the position of the projected point along the segment.

For example suppose mapXY[2] = 5 and tp[2] = 0.33. Then Y[5] is the line segment lying closest to X[2]. The projection of the point X[2] onto the segment Y[5] is the point Xproj[2], which lies one-third of the way between the first and second endpoints of the line segment Y[5].

Details

For each point x in the point pattern X, this function finds the closest line segment y in the line segment pattern Y. It then `projects' the point x onto the line segment y by finding the position z along y which is closest to x. This position z is returned, along with supplementary information.

See Also

nearestsegment for a faster way to determine which segment is closest to each point.

Examples

Run this code
# NOT RUN {
  X <- rstrat(square(1), 5)
  Y <- as.psp(matrix(runif(20), 5, 4), window=owin())
  plot(Y, lwd=3, col="green")
  plot(X, add=TRUE, col="red", pch=16)
  v <- project2segment(X,Y)
  Xproj <- v$Xproj
  plot(Xproj, add=TRUE, pch=16)
  arrows(X$x, X$y, Xproj$x, Xproj$y, angle=10, length=0.15, col="red")
# }

Run the code above in your browser using DataCamp Workspace