- 直線上に線分がいくつかある。
- 点もいくつかある。
- どの線分(点を含む)でもよいので、線分に含まれる点を集めて、新たに線分の集合として表すこととする
- こんな感じ
#重複のある線分のリストを作る
#線分上か否かを判定する
#点を多く含む線分リストを作る
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)