• 直線上に線分がいくつかある。
  • 点もいくつかある。
  • どの線分(点を含む)でもよいので、線分に含まれる点を集めて、新たに線分の集合として表すこととする
  • こんな感じ
#重複のある線分のリストを作る
#線分上か否かを判定する
#点を多く含む線分リストを作る
n<-50
x<-t(apply(matrix(round(runif(2*n)*10),n,2),1,FUN="sort"))
x<-x*rpois(n,5)
for(i in 1:n){
 if(runif(1)<0.8){
  x[i,1]<-x[i,2]
 }
}


countlessEq<-function(a,b){
 length(which(b<=a))
}
countless<-function(a,b){
 length(which(b<a))
}

st<-apply(matrix(x[,1],nrow=length(x[,1])),1,FUN="countless",x[,1])-
apply(matrix(x[,1],nrow=length(x[,1])),1,FUN="countless",x[,2])

end<-apply(matrix(x[,2],nrow=length(x[,1])),1,FUN="countlessEq",x[,1])-
apply(matrix(x[,2],nrow=length(x[,1])),1,FUN="countlessEq",x[,2])

stlist<-which(st==0)
endlist<-which(end==0)
tmpst<-intersect(x[stlist,1],x[stlist,1])
tmpend<-intersect(x[endlist,2],x[endlist,2])

#線分の開始位置と終了位置のリスト
sts<-sort(tmpst)
ends<-sort(tmpend)

#プロットすれば
#黒は、元の線分、赤は、重ね合わせた線分
#ただし、x=yの直線上の点が表すのは、その位置の「点」
#x=yの線より上にある点が現すのは、その座標(x,y) について
# xからyまでの線分
xlim<-ylim<-c(min(x),max(x))

plot(x,xlim=xlim,ylim=ylim)
par(new=TRUE)
plot(sts,ends,xlim=xlim,ylim=ylim,col="red",cex=0.5,pch=15)