Gráfico de superfície 3D com coordenadas xyz

Espero que alguém com experiência possa ajudar na preparação dos arquivos de forma a partir de dados xyz. Um ótimo exemplo de um conjunto de dados bem preparado pode ser vistoaqui para o cometa Churyumov – Gerasimenko, embora as etapas anteriores na criação doarquivo de forma não são fornecidos.

Estou tentando entender melhor como aplicar uma superfície a um determinado conjunto de coordenadas XYZ. O uso de coordenadas cartesianas é direto com o pacote R "rgl", no entanto, as formas que envolvem o objeto parecem mais difíceis. Encontrei o pacote Rgeometry, que fornece uma interface paraQHULL funções. Tentei usar isso para calcular facetas trianguladas de Delaunay, que podem ser plotadas emrgl. Não consigo descobrir algumas das opções associadas à funçãodelaunayn possivelmente controlar as distâncias máximas em que essas facetas são calculadas. Espero que alguém aqui possa ter algumas idéias para melhorar a construção da superfície a partir de dados xyz.

Exemplo usando o conjunto de dados "Stanford bunnny":
library(onion)
library(rgl)
library(geometry)
data(bunny)

#XYZ point plot
open3d()
points3d(bunny, col=8, size=0.1)
#rgl.snapshot("3d_bunny_points.png")

#Facets following Delaunay triangulation
tc.bunny <- delaunayn(bunny)
open3d()
tetramesh(tc.bunny, bunny, alpha=0.25, col=8)
#rgl.snapshot("3d_bunny_facets.png")

Esta resposta me faz acreditar que pode haver um problema com a implementação R do Qhull. Além disso, já tentei várias configurações (por exemplo,delaunayn(bunny, options="Qt")) com pouco efeito. As opções de Qhull são descritasaqui

Editar:

Aqui está um exemplo adicional (mais simples) de uma esfera. Mesmo aqui, o cálculo das facetas nem sempre encontra os vértices vizinhos mais próximos (se você girar a bola, verá algumas facetas atravessando o interior).

library(rgl)
library(geometry)
set.seed(1)
n <- 10
rho <- 1
theta <- seq(0, 2*pi,, n) # azimuthal coordinate running from 0 to 2*pi 
phi <- seq(0, pi,, n) # polar coordinate running from 0 to pi (colatitude)
grd <- expand.grid(theta=theta, phi=phi)

x <- rho * cos(grd$theta) * sin(grd$phi)
y <- rho * sin(grd$theta) * sin(grd$phi)
z <- rho * cos(grd$phi)

set.seed(1)
xyz <- cbind(x,y,z)
tbr = t(surf.tri(xyz, delaunayn(xyz)))
open3d()
rgl.triangles(xyz[tbr,1], xyz[tbr,2], xyz[tbr,3], col = 5, alpha=0.5)
rgl.snapshot("ball.png")

questionAnswers(3)

yourAnswerToTheQuestion