Thinking / Platonic Solids: Modèles, code et images de solides platoniciens en 3D. | Géometrie sacrée

tout le texte

Ce référentiel contient des modèles 3D des solides platoniciens au format de fichier OBJ, des images des solides platoniciens et du code C ++ pour générer des masques triangulaires des solides platoniciens.

La motivation de ce petit projet est qu'il est difficile de trouver des modèles des solides platoniques dans un seul format. La génération des verticales des modèles est triviale et bien documentée (par exemple Wikipedia). Cependant, les discussions omettent souvent de générer des indices de point de pointe pour les triangles.

Tout dans ce référentiel est publié sous la licence MIT.

des modèles

Les modèles se trouvent dans le dossier modèle. Ces modèles sont stockés dans le format le plus simple possible (format de fichier OBJ) et ne contiennent que des index de sommet et de visage. Si vous souhaitez utiliser d'autres formats, veuillez copier les données trouvées ici. Les modèles utilisent des coins divisés et des polygones d'ordre supérieur (carrés et carrés) ont été triangulés. La triangulation est dans le sens opposé. Enfin, les modèles sont centrés sur l'origine et mis à l'échelle de manière typique afin que la plus grande taille de sommet soit égale à 1 (tétraèdre, cube, octaèdre) ou le nombre d'or (1 + sqrt (5)) / 2 (dodécèdre, icosaèdre).

Code

Dans certains cas, il est pratique de générer des masques triangulaires des solides platoniques dans le code, plutôt que d'avoir à s'appuyer sur l'analyse de modèles à partir de fichiers. Les tests de périphérique en sont un bon exemple, où il est souvent souhaitable d'éviter la dépendance aux fichiers.

$ CD ré: && solides platoniques mkdir
$ CD Solides platoniques
$ git clone - récursif https://github.com/thinks/platonic-solids.git .
$ orge mkdir && CD construire
$ cmake -DPLATONIC_SOLIDS_GENERATE_MODELS = ON ..
$ cmake - orge . - Version de configuration

Notez qu'un clone récursif est requis pour initialiser le sous-module obj-io. Lorsque l'indicateur de configuration PLATONIC_SOLIDS_GENERATE_MODELS est réglé sur SUR, les fichiers du répertoire modèle sont générés dans le cadre du processus de génération. Cela peut être utilisé pour s'assurer que les fichiers de modèle sont toujours synchronisés avec les masques triangulaires générés par le code. Pour ignorer cette fonctionnalité, définissez simplement le drapeau PLATONIC_SOLIDS_GENERATE_MODELS = OFFou ne le saisissez pas du tout.

Le code de génération des masques triangulaires se trouve dans un seul fichier d'en-tête. Par exemple, si nous voulons générer une grille de triangle à l'échelle, cela pourrait ressembler à ceci.

#comprendre <cstdint>



#comprendre <tuple>



#comprendre <vecteur>







#comprendre "penseur / platonic_solids / platonic_solids.h"

struct MyVec3 
  flotte X;
  flotte y;
  flotte z;
;

struct MyMesh 
std :: vecteur postes;
std :: vector <std ::uint32_t> index;
;

// Prend une partie des solides platoniques et retourne une copie à l'échelle
// dans un autre format Web.
cible <type- MeshT>
MyMesh ScaledSolid(const MeshT & mesh, const flotte échelle) 
  en utilisant MeshPositionsType = decltype(type- MeshT :: positions);
  en utilisant MeshIndicesType = decltype(type- MeshT :: triangle_indices);

MyMesh my_mesh;

  // Copiez et mettez à l'échelle les positions.
  const std ::taille_t kPosCount = std :: tuple_size:: valeur / 3;
my_mesh.postes.réserve(kPosCount);
  à (Std ::taille_t i = 0; je < kPosCount; ++ i) 
my_mesh.postes.repousser(MyVec3 
échelle * maille.postes(3 * JE),
échelle * maille.postes(3 * i + 1)
échelle * maille.postes(3 * i + 2)
);


  // Copiez les index.
  const std ::taille_t kIdxCount = std :: tuple_size::valeur;
my_mesh.indices.réserve(kIdxCount);
  à (Std ::taille_t i = 0; je < kIdxCount; ++ i) 
my_mesh.indices.repousser(Engrener.triangle_indices(JE));


  revenir my_mesh;


MyMesh ScaledIcosaèdre() 
  // Notez que nous fournissons les types à utiliser pour le solide platonique
  // positions et indices ici.
  revenir ScaledSolid(Pensée :: IcosaèdreTriangleMesh <flotte, std ::uint32_t> (),
                     2.F);

Des photos

Des images des solides platoniques se trouvent dans le dossier d'images. Les images ont été reproduites avec un traceur par échantillonnage Monte-Carlo. Le grain présent dans les images est typique de ce type de processus, où le bruit est éliminé de manière itérative à mesure que l'échantillonnage augmente. Enfin, les wireframes ont été ajoutés manuellement comme étape de finition.

Travail futur

Il sera plus clair de passer des commandes sur les points supérieurs afin qu'ils correspondent au tableau trouvé sur wikipedia.

En observant les relations entre les robustes de Platon, nous pouvons spécifier que l’icosaèdre est l’inverse précis du dodécaèdre. C’est-à-dire, si vous connectez les échelons centraux des 12 pentagones qui constituent le composant éthérique, vous aurez créé les douze coins de l’icosaèdre aqueux. nC’est intrigant parce que ce que nous avons pu observer jusqu’à présent de l’éther indique qu’il se inclus effectivement comme un fluide. Certes, la mesure et l’observation de l’éther s’est avérée assez dur jusqu’à présent, à cause de son omniprésence. Comment mesurer quelque chose dont on ne peut s’échapper ? Et si nous ne pouvons pas le mesurer, de quelle manière pouvons-nous être sûrs qu’il existe ? nNous avons peu de mal à mesurer les autres composants : la masse cinétique de la terre ; les contre sens artificiels rendues solubles par l’eau ; la chaleur rayonnante du feu ; les volts du vent électrique. Celles-ci s’observent plutôt facilement, ‘ continuellement ouvertes à notre regard ‘ comme elles le font. Mais l’éther super subtil échappe à une détection facile. ‘ n

Laisser un commentaire