如何设置Delaunay三角剖分中三角形边的最大长度? [英] How to set maximum length of triangle side in Delaunay triangulation?

查看:168
本文介绍了如何设置Delaunay三角剖分中三角形边的最大长度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从Delaunay三角测量中删除比我需要的距离大的距离?

How to remove distances from Delaunay triangulation which are larger than I need?

示例数据:

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)

绘制地图:

plot(x,y)

Delaunay三角剖分,带有tri.mesh()-package(tripack)

Delaunay triangulation with 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)

如何仅提取较短的距离?我不需要那些大的,您肯定知道我的意思是什么距离. 在tri.mesh()函数中是否有一些参数可以做到这一点? 还是可以在之后完成?

How can I extract only shorter distances? I do not need those large ones you surely know which distances I mean. Is there some argument to do this in tri.mesh() function? Or it could be done after it?

距离甚至还存储在这个物体中吗?

Are distances even stored in this object?

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 

推荐答案

文档(?tri)建议这些段的形式为r$tlist[k] -- r$tlist[r$tlptr[k]]:您可以删除超出某些阈值的段.

The documentation (?tri) suggests that the segments are of the form r$tlist[k] -- r$tlist[r$tlptr[k]]: you can remove those beyond some threshold.

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 )

这篇关于如何设置Delaunay三角剖分中三角形边的最大长度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆