Creo que quieres el casco convexo de tus datos. Prueba con esto
library(grDevices) # load grDevices package
df <- data.frame(X = c(-62, -40, 9, 13, 26, 27, 27),
Y = c( 7, -14, 10, 9, -8, -16, 12)) # store X,Y together
con.hull.pos <- chull(df) # find positions of convex hull
con.hull <- rbind(df[con.hull.pos,],df[con.hull.pos[1],]) # get coordinates for convex hull
plot(Y ~ X, data = df) # plot data
lines(con.hull) # add lines for convex hull
EDITAR
Si quieres añadir una línea desde el origen a cada lado del casco convexo de forma que cada línea sea perpendicular al casco convexo, entonces prueba esto:
getPerpPoints <- function(mat) {
# mat: 2x2 matrix with first row corresponding to first point
# on the line and second row corresponding to second
# point on the line
#
# output: two points which define the line going from the side
# to the origin
# store the inputs more conveniently
x <- mat[,1]
y <- mat[,2]
# define a new matrix to hold the output
out <- matrix(0, nrow = 2, ncol = 2)
# handle special case of vertical line
if(diff(x) == 0) {
xnew <- x[1]
}
else {
# find point on original line
xnew <- (diff(y) / diff(x)) * x[1] - y[1]
xnew <- xnew / (diff(y) / diff(x) + diff(x) / diff(y))
}
ynew <- -(diff(x) / diff(y)) * xnew
# put new point in second row of matrix
out[2,] <- c(xnew, ynew)
return(out = out)
}
Después de haber trazado los puntos iniciales, así como el casco convexo de los datos, ejecute el código anterior y el siguiente:
for(i in 1:4) {
lines(getPerpPoints(con.hull[i:(i+1),]))
}
Tenga en cuenta que algunas de las líneas que van desde el origen a cada lado no terminarán dentro del interior del casco convexo de los datos. Esto es lo que obtuve como resultado: