2017-09-18 6 views
0

Voici le code R pour ma parcelle 3D ... Je veux générer des tranches 2d de ce tracé 3D. J'utilise RGL paquet dans R.Comment créer des tracés de découpe 2D à partir de données 3D dans R?

library(rgl) 

    > ncv1 
      [,1]   [,2]   [,3] 
[1,] 0.0087173253 0.0015347787 0.0007591226 
[2,] 0.0015347787 0.0066770936 -0.0001649119 
[3,] 0.0007591226 -0.0001649119 0.0011324989 

> ncv2 
      [,1]   [,2]   [,3] 
[1,] 0.0080515223 0.0.0006745652 
[2,] 0.0.0064364687 -0.0001695962 
[3,] 0.0006745652 -0.0001695962 0.0011687981 

> ntruemean 
[1] 4.775067 5.596896 1.142223 

> open3d() 
wgl 
10 

plot3d(ellipse3d(ncv2,ntruemean),col="red",type='shade',xlim=c(-2,2),ylim=c(-2,2),zlim=c(-2,2)) 

plot3d(ellipse3d(ncv1,ntruemean),col="blue",type='wire',add=TRUE,xlim=c(-2,2),ylim=c(-2,2),zlim=c(-2,2)) 

rgl.postscript("persp3dd1.eps","eps") 

enter image description here

+0

Avez-vous essayé d'utiliser 'clipplanes3d'? – user2554330

+0

Je suis capable de trancher le graphique mais est-il possible de le découper en son centre. Donc on ne voit que du rouge à l'intérieur et du net bleu? J'ai du mal à trouver l'avion qui traverse le centre. Voici le code a <- 1 b <-1 c <-1 d <-0 Open3D() plot3d (ellipse3d (NCV2, ntruemean), col = "rouge", type = 'ombre', xlim = c (-2,2), ylim = c (-2,2), zlim = c (-2,2)) plot3d (ellipse3d (ncv1, ntruemean), col = "bleu", type = ' wire ', add = VRAI, xlim = c (-2,2), ylim = c (-2,2), zlim = c (-2,2)) useSubscene3d (ids ["clipregion"]) rgl. clipplanes (a, b, c, d) rgl.postscript ("persp3dd1.eps", "eps") – browndynamite

Répondre

0

Vous pouvez le couper en tranches assez facilement dans tout plan que vous aimez. Vous avez juste besoin de comprendre les coefficients de l'équation de l'avion au format a x + b y + c z + d = 0, qui est un problème d'algèbre linéaire de 1ère année.

Je ne peux pas faire cela pour vous, parce que je ne sais pas quelle ellipse vous avez l'intention de dessiner, ou ce que vous entendez par «droit au centre». Vous utilisez ntruemean comme nom de variable, mais passez le comme le paramètre scale, ce qui n'a pas vraiment de sens. Je soupçonne que vous vouliez le passer comme le paramètre centre.

En supposant que ce que vous vouliez dire, ce clip dans le centre:

library(rgl) 
ncv2 <- diag(1:3) # not your values 
ntruemean <- 4:6 # also not your values 
plot3d(ellipse3d(ncv2, centre = ntruemean), 
     col="red", type='shade') 
plot3d(ellipse3d(ncv2*1.01, centre = ntruemean), col = "blue", type="wire", add = TRUE) 
normal <- 7:9 # Choose your own normal! 
clipplanes3d(normal, d = -sum(normal * ntruemean)) 
+0

Mon ellipse a le centre ntruemean <-c (4.775067 5.596896 1.142223) et les matrices de covariance de variance sont ncv1 (bleu) et ncv2 (rouge). Je veux découper mon graphique de telle manière que je devrais être capable de voir seulement la partie rouge à l'intérieur pour les tranches et la partie bleue à l'extérieur. Identique à la coupe de la pomme au milieu, nous voyons donc une partie blanche à l'intérieur pour les tranches et la partie rouge à l'extérieur. Je suis désolé pour toute confusion. – browndynamite

+0

Votre code n'a pas utilisé 'ntruemean' comme centre, il l'a utilisé comme échelle. La différence entre un ellipsoïde dans 'rgl' et une pomme est que' rgl' ne peut que dessiner la surface. Lorsque vous coupez une pomme, vous voyez ce qui se trouve sous la surface. Pour dessiner cela, 'rgl' devrait prendre en charge les" textures 3D ", et ce n'est pas le cas. – user2554330