% File src/library/graphics/man/xspline.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2014 R Core Team
% Distributed under GPL 2 or later

\name{xspline}
\alias{xspline}
\title{Draw an X-spline}
\description{
  Draw an X-spline, a curve drawn relative to control points.
}
\usage{
xspline(x, y = NULL, shape = 0, open = TRUE, repEnds = TRUE,
        draw = TRUE, border = par("fg"), col = NA, \dots)
}
\arguments{
  \item{x,y}{vectors containing the coordinates of the vertices
    of the polygon. See \code{\link{xy.coords}} for alternatives.}
  \item{shape}{A numeric vector of values between -1 and 1, which
    control the shape of the spline relative to the control points.}
  \item{open}{A logical value indicating whether the spline is
    an open or a closed shape.}
  \item{repEnds}{For open X-splines, a logical value indicating whether
    the first and last control points should be replicated for drawing
    the curve. Ignored for closed X-splines.}
  \item{draw}{logical: should the X-spline be drawn?  If false, a set of
    line segments to draw the curve is returned, and nothing is drawn.}
  \item{border}{the color to draw the curve.   Use \code{border = NA} to
    omit borders.}
  \item{col}{the color for filling the shape. The default,
    \code{NA}, is to leave unfilled.}
  \item{\dots}{\link{graphical parameters} such as \code{lty}, \code{xpd},
    \code{lend}, \code{ljoin} and \code{lmitre} can be given as arguments.}
}
\details{
  An X-spline is a line drawn relative to control points.  For each
  control point, the line may pass through (interpolate) the control
  point or it may only approach (approximate) the control point;  the
  behaviour is determined by a shape parameter for each control point.

  If the shape parameter is greater than zero, the spline approximates
  the control points (and is very similar to a cubic B-spline when the
  shape is 1).  If the shape parameter is less than zero, the spline
  interpolates the control points (and is very similar to a Catmull-Rom
  spline when the shape is -1).  If the shape parameter is 0, the spline
  forms a sharp corner at that control point.

  For open X-splines, the start and end control points must have a shape
  of 0 (and non-zero values are silently converted to zero).

  For open X-splines, by default the start and end control points are
  replicated before the curve is drawn.  A curve is drawn between
  (interpolating or approximating) the second and third of each set of
  four control points, so this default behaviour ensures that the
  resulting curve starts at the first control point you have specified
  and ends at the last control point.  The default behaviour can be
  turned off via the \code{repEnds} argument.
}
\value{
  If \code{draw = TRUE}, \code{NULL} otherwise a list with elements
  \code{x} and \code{y} which could be passed to \code{\link{lines}},
  \code{\link{polygon}} and so on.

  Invisible in both cases.
}
\note{
  Two-dimensional splines need to be created in an isotropic coordinate
  system.  Device coordinates are used (with an anisotropy correction if
  needed.)
}
\references{
  Blanc, C. and Schlick, C. (1995),
  \emph{X-splines : A Spline Model Designed for the End User},
  in \emph{Proceedings of SIGGRAPH 95}, pp.\sspace{}377--386.
  \url{https://dept-info.labri.fr/~schlick/DOC/sig1.html}
}
\seealso{
  \code{\link{polygon}}.

  \code{\link{par}} for how to specify colors.
}
\examples{
## based on examples in ?grid.xspline

xsplineTest <- function(s, open = TRUE,
                        x = c(1,1,3,3)/4,
                        y = c(1,3,3,1)/4, ...) {
    plot(c(0,1), c(0,1), type = "n", axes = FALSE, xlab = "", ylab = "")
    points(x, y, pch = 19)
    xspline(x, y, s, open, ...)
    text(x+0.05*c(-1,-1,1,1), y+0.05*c(-1,1,1,-1), s)
}
op <- par(mfrow = c(3,3), mar = rep(0,4), oma = c(0,0,2,0))
xsplineTest(c(0, -1, -1, 0))
xsplineTest(c(0, -1,  0, 0))
xsplineTest(c(0, -1,  1, 0))
xsplineTest(c(0,  0, -1, 0))
xsplineTest(c(0,  0,  0, 0))
xsplineTest(c(0,  0,  1, 0))
xsplineTest(c(0,  1, -1, 0))
xsplineTest(c(0,  1,  0, 0))
xsplineTest(c(0,  1,  1, 0))
title("Open X-splines", outer = TRUE)

par(mfrow = c(3,3), mar = rep(0,4), oma = c(0,0,2,0))
xsplineTest(c(0, -1, -1, 0), FALSE, col = "grey80")
xsplineTest(c(0, -1,  0, 0), FALSE, col = "grey80")
xsplineTest(c(0, -1,  1, 0), FALSE, col = "grey80")
xsplineTest(c(0,  0, -1, 0), FALSE, col = "grey80")
xsplineTest(c(0,  0,  0, 0), FALSE, col = "grey80")
xsplineTest(c(0,  0,  1, 0), FALSE, col = "grey80")
xsplineTest(c(0,  1, -1, 0), FALSE, col = "grey80")
xsplineTest(c(0,  1,  0, 0), FALSE, col = "grey80")
xsplineTest(c(0,  1,  1, 0), FALSE, col = "grey80")
title("Closed X-splines", outer = TRUE)

par(op)

x <- sort(stats::rnorm(5))
y <- sort(stats::rnorm(5))
plot(x, y, pch = 19)
res <- xspline(x, y, 1, draw = FALSE)
lines(res)
## the end points may be very close together,
## so use last few for direction
nr <- length(res$x)
arrows(res$x[1], res$y[1], res$x[4], res$y[4], code = 1, length = 0.1)
arrows(res$x[nr-3], res$y[nr-3], res$x[nr], res$y[nr], code = 2, length = 0.1)
}
\keyword{aplot}
