2013-07-16 8 views
5

Come rimuovere le distanze dalla triangolazione di Delaunay che sono più grandi del necessario?Come impostare la lunghezza massima del lato triangolo nella triangolazione di Delaunay in R?

dati Esempio:

x<-rep(1:12, c(2,2,7,9,10,5,4,6,10,10,9,4)) 
y<-c(1,2,1,2,1:3,5:8,1:9,1:10,2,7:10,8:11,7:12,3:12,3:12,4:12,5,8:10) 
x_plus<-seq(0.2:0.8, by=0.1) 
x<-x+sample(x_plus, 78, replace=TRUE) 
y<-y+sample(x_plus, 78, replace=TRUE) 

Tracciando la mappa:

plot(x,y) 

Delaunay triangolazione con tri.mesh() - Package (tripack)

my.triangles<-tri.mesh(x,y) 
plot(my.triangles, do.points=FALSE, lwd=0.2) 
points(x,y, col = "blue", pch=20) 

Come posso estrarre solo distanze più brevi? Non ho bisogno di quelli grandi, sai sicuramente quali distanze intendo. C'è qualche argomento per farlo nella funzione tri.mesh()? Oppure si potrebbe fare dopo?

Le distanze sono persino memorizzate in questo oggetto?

my.triangles 

triangulation nodes with neigbours: 
node: (x,y): neighbours 
1: (1.4,1.7) [5]: 2 3 4 11 12 
2: (2,3) [6]: 1 4 7 8 9 11 
3: (3,1.8) [4]: 1 4 5 12 
. 
. 
. 
76: (12.4,8.8) [5]: 68 69 70 75 77 
77: (12.9,9.9) [6]: 70 71 72 75 76 78 
78: (13,11) [4]: 72 73 74 77 
number of nodes: 78 
number of arcs: 221 
number of boundary nodes: 10 
boundary nodes: 1 11 12 45 56 66 74 75 77 78 
number of triangles: 144 
number of constraints: 0 
+0

la prego di rendere il vostro esempio riproducibile? Il pacchetto 'tripolt' non sembra disponibile dal CRAN. – QuantIbex

+0

scusate, è il pacchetto: tripack –

+0

Quali sono i criteri concreti per rimuovere un triangolo/spigolo? – QuantIbex

risposta

6

La documentazione (?tri) suggerisce che i segmenti hanno la forma r$tlist[k] -- r$tlist[r$tlptr[k]]: è possibile rimuovere quelle oltre una certa soglia.

r <- tri.mesh(x,y) 
k <- seq_len(r$tlnew - 1) 
i <- r$tlist[k]   
j <- r$tlist[r$tlptr[k]] 
keep <- i > 0 
i <- abs(i[ keep ]) 
j <- abs(j[ keep ]) 
plot(x, y) 
segments(r$x[i], r$y[i], r$x[j], r$y[j], col="grey") 
distances <- sqrt((r$x[i] - r$x[j])^2 + (r$y[i] - r$y[j])^2) 
threshold <- 2.5 # Choose the threshold manually 
i <- i[ distances < threshold ] 
j <- j[ distances < threshold ] 
segments(r$x[i], r$y[i], r$x[j], r$y[j], lwd = 2) 

smaller triangulation