2013-07-16 21 views
5

Wie entferne ich Entfernungen von Delaunay Triangulation, die größer sind als ich brauche?Wie wird die maximale Länge der Dreiecksseite in der Delaunay-Triangulation in R festgelegt?

Beispiel Daten:

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) 

Plotten der Karte:

plot(x,y) 

Delaunay Triangulation mit tri.mesh() - Paket (Tripack)

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

Wie kann ich nur kürzere Entfernungen extrahieren? Ich brauche diese großen nicht, du weißt sicher, welche Entfernungen ich meine. Gibt es ein Argument, dies in tri.mesh() Funktion zu tun? Oder könnte es danach gemacht werden?

Sind in diesem Objekt sogar Entfernungen gespeichert?

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

Könnten Sie bitte Ihr Beispiel reproduzierbar machen? Das Paket "Tripolt" scheint vom CRAN nicht verfügbar zu sein. – QuantIbex

+0

Entschuldigung, es ist Paket: tripack –

+0

Was ist das konkrete Kriterium, um ein Dreieck/Kante zu entfernen? – QuantIbex

Antwort

6

Die Dokumentation (?tri) schlägt vor, dass die Segmente der Form r$tlist[k] -- r$tlist[r$tlptr[k]]: Sie diejenigen über eine bestimmte Schwelle entfernen können.

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