我一直在研究基于Qhull(R中的geometry包)的R和MatLab中的一些函数,以将圆形图中的局部笛卡尔X,Y,Z点投影到球面(theta,phi, R),以0,0,0为中心。由于所有的Z值在原始坐标中都是正的(X和Y的中心位于0),这给了我所需的半球投影(点颜色按Z值缩放),用radial.plot绘制( )使用phi(方位角)和theta(极角)的R plotrix的函数:
对于球面变换,在以0,0,0为中心后,而不是使用Bourke (1996)的计算,我使用Wikipedia上列出的ISO规范(不是物理惯例)。
r <- sqrt(x^2 + y^2 + z^2)
theta <- acos(z/r)
phi <- atan2(y,x)
我想知道在这个半球投影中包含给定类点的Voronoi单元区域,保留透视失真。虽然计算二维笛卡尔X,Y点的二维Voronoi图很简单,但将这个Voronoi图转换为二维球形可能无法产生预期的结果,是吗?也许最好直接从半球投影点计算Voronoi图,然后返回每个单元的区域。
更新:我已经解决了。我的解决方案将在新的R包中共享,我将在此处发布。
答案 0 :(得分:2)
OP,亚当·埃里克森(Adam Erickson)发布了gapfraction
软件包,该软件包实现了埃里克森的半球-Voronoi间隙分数算法。
R的gapfraction软件包是为在地下进行建模而设计的 借助光探测与测距(LiDAR)数据在森林中进行采光。在 除了冠层间隙分数(Po)的度量,角冠层 封包(ACC)和垂直篷盖(VCC) 一种新的树冠高度模型(CHM)算法,流行的个体树 冠(ITC)检测算法,以及许多其他算法 为统计建模提供有用的功能,包括 树木距样地中心的距离。
有关更多详细信息,请咨询:gapfraction: R functions for LiDAR canopy light transmission
请查看下面的代码的一些简单演示:
# devtools::install_github("adam-erickson/gapfraction", dependencies=TRUE)
library(raster)
library(gapfraction)
data(las)
# This function implements Erickson's hemispherical-Voronoi gap fraction algorithm
# with four common lens geometries: equi-distant, equi-angular, stereographic, and orthographic
P.hv(
las = las,
model = "equidist",
thresh.val = 1.25,
thresh.var = "height",
reprojection = NA,
pol.deg = 5,
azi.deg = 45,
col = "height",
plots = TRUE,
plots.each = FALSE,
plots.save= FALSE
)