Quand j'utilise rgl :: spheres3d () code>, les sphères rendues ont des bords faces de facettes clunky. spheres = data.frame(x = c(1,2,3), y = c(1,3,1),
color = c("#992222" , "#222299", "#229922"))
open3d()
spheres3d(spheres$x, spheres$y, radius = 1, color = spheres$color)
6 Réponses :
Ce n'est pas facile; Je pense em> si vous voulez faire cela, vous allez avoir à pour appeler la fonction avec des valeurs plus grandes (cette fonction est définie sur la ligne 25 de Je n'ai pas essayé cela. Bonne chance ... alternativement, vous pouvez demander au responsable de l'emballage de faire un paramètre réglable via
src / sphhereset.cpp code>, qui est actuellement li>
ul> src / spheremesh.cpp code>; les arguments sont in_segments code> et in_sections code> ...) p>
sudo apt-get Build -p R-Cran-RGL CODE> pour les obtenir, je pense ...) li>
ul> matériaux3D code> ou d'une autre manière ... P> P>
J'essaierais de télécharger la source, modifiant la ligne mentionnée ci-dessus et i> the description (code> (pour vous définir pour être le responsable), puis téléchargez-le via FTP sur win-builder.r-project.org code>
Bien que Il devrait être possible de s'améliorer à ce sujet, par exemple en utilisant Un exemple de la fonction en action: p> RGL :: spheres3d () code> ne peut pas faire cela, une alternative consiste à écrire votre propre fonction pour dessiner des sphères. Voici une fonction qui rend une sphère comme une grille de quadrilathereaux espacée à des degrés égaux de latitude et de longitude.
p> p>
Oui, dessiner votre propre sphère est la voie à suivre. Une amélioration possible si vous voulez qu'une seule couleur est que vous pouvez dessiner une seule sphère et la réutiliser comme un sprite 3D. Cela enregistre la mémoire, ce qui n'a probablement pas d'importance dans R, mais fera une différence notable de la taille du fichier si vous exportez la scène à l'aide de rglwidget () code>.
Une approche beaucoup plus simple consiste à utiliser subdivision3d () code>. Ici, profondeur = 4 code> n'est pas tout ce qui est lisse, mais vous pouvez augmenter cela.
L'ajout de normales le rend encore mieux. Vous pouvez le faire en ajoutant sphère $ normales <- SPHERE $ VB code> pour une sphère ou plus généralement forme <- addnormals (forme) code>.
J'aime la simplicité de cette approche. Et il peut être amélioré en utilisant dodécaèdre3d () code> plutôt que cube3d () code>. Malheureusement, cela ne fonctionne pas pour les sphères haute résolution. Si j'augmente la profondeur supérieure à 6, j'ai tendance à obtenir des erreurs d'allocation de la mémoire. Cela dit, Dodecaedron3D à la profondeur 6 a l'air assez passable, si quelque peu lent à traiter
Suite à mon dernier commentaire, ajoutez la suggestion de @ user2554330 d'ajouter des normales à icosaedron3d () code> subdivisé à la profondeur 6, fait de très belles sphères
Cela fait de très belles sphères en douceur et est nettement plus rapide de traiter que ma fonction à base de QMESH3D. La seule chose qui me retient d'accepter cette réponse est que les sphères ont des défauts autour des pôles, où il y a des lacunes dans la surface et une légère crête à l'équateur où les deux hémisphères ne correspondent pas tout à fait. Avez-vous des idées sur la manière de résoudre ces problèmes?
@dww; Malheureusement, cela semble impossible. Il y a des méthodes pour exprimer une sphère avec deux variables. Mais la zone de densité faible ou élevée et / ou des points dupliqués se posent de quelque manière que ce soit.
C'est excellent - bon travail. A N = 101, le défaut de crête autour de l'équateur est toujours là, mais un bon compromis entre la vitesse et la qualité. Avec N = 201, c'est déjà difficile à voir. À n = 301, à peine discernable et toujours rapide.
Merci de me donner le vote correct de la réponse. J'aimerais obtenir un badge de bronze dans RGL, mais à ce rythme, cela prendra environ 10 ans.
Une autre possibilité est d'utiliser la fonction vcgsphere code> du package code> rvccg code>.