r - computational - cgal
Los puntos cartesianos 3-D son hemisféricos 2-D y calculan el área de las células Voronoi 2-D (1)
OP, Adam Erickson, publicó el paquete gapfraction
que implementa el algoritmo de fracción de brecha Voronoi hemisférico de Erickson.
El paquete gapfraction para R fue diseñado para modelar la luz del sótano en bosques con datos de detección y alcance de luz (LiDAR). Además de las métricas de la fracción de espacio de dosel (Po), el cierre de dosel angular (ACC) y la cubierta de dosel vertical (VCC), el paquete implementa un nuevo algoritmo de modelo de altura de dosel (CHM), algoritmos populares de detección de la corona de árbol individual (ITC), y una serie de otros algoritmos que producen características útiles para el modelado estadístico, incluida la distancia de los árboles al centro de la parcela.
Para más detalles, consulte: gapfraction: funciones R para la transmisión de luz de dosel LiDAR
Por favor, vea una demostración simple del código a continuación:
# 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
)
He estado trabajando en algunas funciones en R y MatLab basadas en Qhull (el paquete de geometry en R) para proyectar puntos cartesianos X, Y, Z locales dentro de un trazado circular a esférico (theta, phi, R), centrado en 0, 0,0. Dado que todos los valores de Z son positivos en las coordenadas originales (X e Y se centran en 0), esto me da la proyección hemisférica que deseo (los colores de punto se escalan en valores de Z), trazados con el gráfico radial ( ) función de R plotrix , utilizando phi (ángulo de acimut) y theta (ángulo polar):
Para la transformación esférica, después de centrarme en 0,0,0, en lugar de utilizar los cálculos de Bourke (1996) , utilizo la especificación ISO que figura en Wikipedia (no la convención de física).
r <- sqrt(x^2 + y^2 + z^2)
theta <- acos(z/r)
phi <- atan2(y,x)
Me gustaría saber el área de las células Voronoi que contienen puntos de una clase determinada en esta proyección hemisférica, preservando la distorsión de la perspectiva. Si bien es sencillo calcular el diagrama 2-D de Voronoi para los puntos X cartesianos X, Y, la traducción de este diagrama Voronoi a esférico 2D puede no producir los resultados deseados, ¿sí? Quizás sería mejor calcular el diagrama de Voronoi directamente desde los puntos proyectados hemisféricos y luego devolver el área de cada celda.
Actualización: lo he resuelto. Mi solución se compartirá en un nuevo paquete R, que publicaré aquí.