Zeichnen der Oberfläche einer Kugel mit dreieckigen 3D-Delaunay-Feldern in R

[BEARBEITEN: allgemeinere Lösungen finden sich in den Antworten aufdiese Frage]

Ich frage mich, ob mir jemand helfen kann, eine Annäherung an die Oberfläche einer Kugel mithilfe von XYZ-Koordinaten zu zeichnen. Ich habe versucht, mit dem Paket Delaunay triangulierte Paneele zu berechnengeometry und dann mit zu planenrgl. Beim ersten Versuch, der gut aussieht, sind leider Delaunay-3D-Dreiecke entstanden, die sich durch die Kugel kreuzen. Ich möchte letztendlich nur die Oberfläche zeichnen:

Generieren Sie 3D-XYZ-Daten einer Kugel
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)
xyzw <- cbind(x,y,z,w=1)
Berechne 3d Delaunay Dreiecke und zeichne mit rgl:
#install.packages("geometry")
library(geometry)
library(rgl)

tc <- delaunayn(xyzw[,1:3])
open3d()
tetramesh(tc,cbind(x,y,z), alpha=0.2, col=5)
rgl.snapshot("3d_delaunay.png")

Versuchen Sie, nur Flächendreiecke über 2D-Delaunay-Triangulation zurückzugeben
tc <- delaunayn(xyzw[,c(1:2)])
open3d()
for(i in seq(nrow(tc))){
    vertices <- c(t(xyzw[tc[i,],]))
    indices <- c( 1, 2, 3)
    shade3d( tmesh3d(vertices,indices) , alpha=0.2, col="cyan")
}
rgl.snapshot("2d_delaunay.png")

Offensichtlich funktioniert etwas nicht. Jede Hilfe wäre sehr dankbar.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage