distancePointLine
## 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
x2
y1
y2
distancePointSegment(x,y, x1,y1, x2,y2)
}
distancePointSegment
## 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
ans
ix
lineMag
if( lineMag < 0.00000001) {
warning("short segment")
return(9999)
}
u
u
if((u < 0.00001) || (u > 1)) {
## closest point does not fall within the line segment, take the shorter distance
## to an endpoint
ix
iy
if(ix > iy) ans
else ans
} else {
## Intersecting point is on the line, use the formula
ix
iy
ans
}
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])
}
mydist
max(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]
elbowp
abline(v=elbowp,lty=2,col='red')