使用 Delaunay 三角剖分在 R 中计算表面拉普拉斯/拉普拉斯贝尔特拉米

问题描述 投票:0回答:1

我一直在研究计算拉普拉斯/拉普拉斯-贝尔特拉米算子的方法,但我发现 R 缺乏用于这些目的的内置函数。实际上有一个包允许对此类运算符进行标准化::matrixLaplacian。

我有兴趣使用离散方法(最好是 Delaunay 三角剖分)推导 Laplace-Beltrami 算子。

主要步骤是: 1) 使用 Delaunay 三角剖分创建网格 2) 计算面积矩阵和余切权重矩阵(即 Laplace-Beltrami 离散算子)。为此,需要使用余切。

我也愿意接受任何其他方法。

#Just for starters

vertices <-t(matrix(runif(30), ncol = 10))
colnames(vertices) <- c("x", "y", "z")
tri_mesh <- geometry::delaunayn(vertices) #creating a mesh?

#Possible solution using igraph ? (not sure this might be correct)
library(igraph)
g <- graph_from_data_frame(tri_mesh, directed = FALSE, vertices = 1:10)
L <- laplacian_matrix(g,normalized = T, weights = NA)

1  0  .          .         .  .         .  .          .         .  .        
2  .  1.0000000 -0.1543033 . -0.1428571 . -0.4364358 -0.2390457 . -0.3779645
3  . -0.1543033  1.0000000 . -0.1543033 .  .         -0.5163978 .  .        
4  .  .          .         0  .         .  .          .         .  .        
5  . -0.1428571 -0.1543033 .  1.0000000 . -0.2182179 -0.4780914 .  .        
6  .  .          .         .  .         0  .          .         .  .        
7  . -0.4364358  .         . -0.2182179 .  1.0000000  .         .  .        
8  . -0.2390457 -0.5163978 . -0.4780914 .  .          1.0000000 .  .        
9  .  .          .         .  .         .  .          .         0  .        
10 . -0.3779645  .         .  .         .  .          .         .  1.0000000
r shapes spatial triangulation
1个回答
0
投票

仔细观察(谢谢,Google!),我看到包 Rdimtools 说它使用 Laplace-Beltrami 运算符。这对您来说可能是一个很好的工具,或者可以用来比较您的代码。

© www.soinside.com 2019 - 2024. All rights reserved.