# NOT RUN {
## generate 50 points near (0,0,1) and
## 50 points near (0,0,-1) on Sphere S^2
ndata = 50
theta = seq(from=-0.99,to=0.99,length.out=ndata)*pi
tmpx = cos(theta) + rnorm(ndata,sd=0.1)
tmpy = sin(theta) + rnorm(ndata,sd=0.1)
## wrap it as 'riemdata' class
data = list()
for (i in 1:ndata){
tgt = c(tmpx[i],tmpy[i],1)
data[[i]] = tgt/sqrt(sum(tgt^2)) # project onto Sphere
}
for (i in 1:ndata){
tgt = c(tmpx[i],tmpy[i],-1)
data[[i+ndata]] = tgt/sqrt(sum(tgt^2)) # project onto Sphere
}
data = RiemBase::riemfactory(data, name="sphere")
## compare extrinsic and intrinsic DBSCAN
dbext <- rclust.dbscan(data, eps=0.5, type="extrinsic")
dbint <- rclust.dbscan(data, eps=0.5, type="intrinsic")
## let's visualize the results via MDS in R^2
pdist = stats::as.dist(RiemBase::rbase.pdist(data))
dat2d = stats::cmdscale(pdist, k=2)
opar <- par(no.readonly=TRUE)
par(mfrow=c(1,2))
plot(dat2d[,1], dat2d[,2], col=dbext$cluster, pch=19, main="extrinsic+dbscan")
plot(dat2d[,1], dat2d[,2], col=dbint$cluster, pch=19, main="intrinsic+dbscan")
par(opar)
# }
Run the code above in your browser using DataLab