distancePointLine <- function(x, y, slope, intercept) { ## x, y is the point to test. ## slope, intercept is the line to check distance. ## ## Returns distance from the line. ## ## Returns 9999 on 0 denominator conditions. x1 <- x-10 x2 <- x+10 y1 <- x1*slope+intercept y2 <- x2*slope+intercept distancePointSegment(x,y, x1,y1, x2,y2)}distancePointSegment <- function(px, py, x1, y1, x2, y2) { ## px,py is the point to test. ## x1,y1,x2,y2 is the line to check distance. ## ## Returns distance from the line, or if the intersecting point on the line nearest ## the point tested is outside the endpoints of the line, the distance to the ## nearest endpoint. ## ## Returns 9999 on 0 denominator conditions. lineMagnitude <- function(x1, y1, x2, y2) sqrt((x2-x1)^2+(y2-y1)^2) ans <- NULL ix <- iy <- 0 # intersecting point lineMag <- lineMagnitude(x1, y1, x2, y2) if( lineMag < 0.00000001) { warning("short segment") return(9999) } u <- (((px - x1) * (x2 - x1)) + ((py - y1) * (y2 - y1))) u <- u / (lineMag * lineMag) if((u < 0.00001) || (u > 1)) { ## closest point does not fall within the line segment, take the shorter distance ## to an endpoint ix <- lineMagnitude(px, py, x1, y1) iy <- lineMagnitude(px, py, x2, y2) if(ix > iy) ans <- iy else ans <- ix } else { ## Intersecting point is on the line, use the formula ix <- x1 + u * (x2 - x1) iy <- y1 + u * (y2 - y1) ans <- lineMagnitude(px, py, ix, iy) } ans}###############################################mydata = read.table('clipboard',header = T)###########################mydata=cbind(c(1:15),wss)#########################datanumber = nrow(mydata)mydist = c()for(i in c(1:datanumber)){ d = as.numeric(c(mydata[i,],mydata[1,],mydata[datanumber,])) mydist[i] = distancePointSegment(d[1],d[2],d[3],d[4],d[5],d[6]) }mydistmax(mydist)################filternew = filter(mydist,filter = c(rep(1/datanumber,3)))#plot(filternew)################elbowpoints = which(mydist==max(mydist))plot(mydist)abline(v=elbowpoints,lty=2,col='red')plot(x=mydata[,1],y=mydata[,2],type='l')elbowp = mydata[elbowpoints,1]elbowpabline(v=elbowp,lty=2,col='red')
转载于:https://www.cnblogs.com/arcserver/p/9186008.html
相关资源:各显卡算力对照表!