[PYTHON] Comment créer une figure géométrique 3D en un clic [Du cône triangulaire à la fractale]

Conclusion

Utilisez Blender Python image.png

Spécifications de l'écrivain

・ Système de non-information ・ Je n'ai jamais joué avec le modèle 3D ・ Bien sûr, le mélangeur est presque la première fois

C'est facile parce que vous pouvez le faire!

Que faire ici

Faire une version 3D du "Shelpinsky Gasket" ci-dessus

Comment faire

Je pense que l'écran de blender est divisé en plusieurs parties, mais vous pouvez l'exécuter de manière interactive en sélectionnant "console python" depuis la commutation. image.png

Cependant, il y a beaucoup de choses qui ne peuvent pas être faites avec cela, donc si vous sélectionnez "Editeur de texte" comme recommandation, ce qui suit apparaîtra! image.png Cliquez sur le bouton "Nouveau" ci-dessous ici. C'est tout ce que vous devez faire.

code

Il existe différentes notations, mais c'est fondamentalement simple. Jetons d'abord un coup d'œil à l'ensemble.

import bpy
from math import sqrt

def duplicate_object_rename(arg_objectname='Default', arg_dupname='', position=(0,0,0)):
   for ob in bpy.context.scene.objects:
     ob.select=False
   selectob=bpy.context.scene.objects[arg_objectname]
   #bpy.context.scene.objects.active = selectob
   selectob.select=True
   bpy.ops.object.duplicate_move(
     OBJECT_OT_duplicate=None, TRANSFORM_OT_translate=None)
   # move object
   bpy.ops.transform.translate(value=position)
   selectob.select=False
   if len(arg_dupname) > 0:
     duplicated_objectname=arg_objectname + ".001"
     duplicatedob=bpy.data.objects[duplicated_objectname]
     duplicatedob.name=arg_dupname
   return

scale = 0.01
bpy.ops.mesh.primitive_cone_add(vertices=3,radius1=1*scale,depth=sqrt(2)*scale,location=(scale*sqrt(3)*(.5+.5*1+1),scale*1.5*(1+3*1)/3,scale*sqrt(2)/2),rotation=(0,0,0))
duplicate_object_rename(arg_objectname='Cone', arg_dupname='Duplicate1',position=(scale*sqrt(3),0,0))
duplicate_object_rename(arg_objectname='Cone', arg_dupname='Duplicate2',position=(scale*sqrt(3)/2,scale*1.5,0))
duplicate_object_rename(arg_objectname='Cone', arg_dupname='Duplicate3',position=(scale*sqrt(3)/2,scale*1/2,scale*sqrt(2)))
bpy.ops.object.select_by_type(type = 'MESH')
bpy.ops.object.join()

namehead = 'Duplicate'

for i in range(1,7):
    namebufprev = namehead + str(i)
    namebuf = namehead + str(i+1)
    duplicate_object_rename(arg_objectname=namebufprev, arg_dupname=namebuf,position=(scale*sqrt(3)*2*2**(i-1),0,0))
    duplicate_object_rename(arg_objectname=namebufprev, arg_dupname='buf2',position=(scale*sqrt(3)*2**(i-1),scale*3*2**(i-1),0))
    duplicate_object_rename(arg_objectname=namebufprev, arg_dupname='buf3',position=(scale*sqrt(3)*2**(i-1),scale*2**(i-1),scale*2*sqrt(2)*2**(i-1)))
    bpy.ops.object.select_by_type(type = 'MESH'))
    bpy.ops.object.join()

bpy.ops.object.origin_set(type = 'ORIGIN_GEOMETRY', center = 'MEDIAN') 

Je vais expliquer dans l'ordre

1. Bibliothèque

import bpy
from math import sqrt

J'importe ici un module appelé bpy, qui est une fonction blender. Ceux-ci sont installés depuis le début sans utiliser pip, alors importons sans penser à rien. D'autres modules de base sont inclus depuis le début. Ici, j'importe des maths car j'ai dû prendre la racine carrée pour trouver la position du centre de gravité du triangle. Cela n'inclut pas les pandas, etc. Vous pouvez le faire si vous souhaitez l'installer vous-même, mais nous ne le couvrirons pas ici.

2. Méthode

Et comment le faites-vous? Je pense que ce sera une histoire, mais en fait la réponse est déjà préparée. Quand je joue avec Blender, le code apparaît, et c'est la méthode correspondant à cette opération. Par exemple

bpy.ops.mesh.primitive_cone_add(vertices=3,radius1=1*scale,depth=sqrt(2)*scale,location=(scale*sqrt(3)*(.5+.5*1+1),scale*1.5*(1+3*1)/3,scale*sqrt(2)/2),rotation=(0,0,0))

Mais cela équivaut au cône de la figure primitive. Vous ne pouvez le comprendre que par le pop-up, donc je vais essayer de le faire partiellement par moi-même → Je pense que ce sera un flux d'automatisation. Par conséquent, ceux qui peuvent manipuler librement le mélangeur ne seront pas si difficiles, et ceux qui ne le feront pas seront surpris en fonctionnement plutôt qu'en codage.

3. Notation

Cela ne remplace presque pas le python ordinaire. Pour le dire franchement, il est difficile de dire ce qui ne va pas avec le débogage, alors soyez patient. Il consomme de la mémoire de manière inattendue, donc si vous ne l'écrivez pas correctement, l'opération a tendance à être lente. Même si j'utilise un PC approprié cette fois, il n'est pas sorti immédiatement, mais il est sorti après un battement.

4. Conversion VCI

Après cela, sortez simplement fbx et plongez dans l'unité, mais avant cela, soyez prudent Lors de l'utilisation de vci, il semble que si le nombre de sous-éléments est trop grand, il deviendra soudainement lourd, et dans mon environnement, si j'en mets 800, ce sera un désordre. Et le nombre d'objets dans Fractal augmente rapidement simplement en touchant le nombre d'étages. (Cette fois, c'est au 7ème étage, mais si vous ne le mettez pas ensemble, le casting virtuel tombera ...) Il est donc préférable de rassembler les objets créés à la fin. Mettre ensemble

bpy.ops.object.select_by_type(type = 'MESH')
bpy.ops.object.join()    

Etc. serait pratique. Même si la taille est importante, l'opération ne sera pas trop lente simplement parce que la charge est lourde, mais si le nombre d'objets est important, l'opération sera lente et dans certains cas, le téléchargement en ligne de départ sera rejeté. Le message d'erreur à ce moment-là était "la taille du bloc est trop grande".

20191013-220416_89.png Je l'ai amené dans le monde de la réalité virtuelle avec ça

développement

Si vous apprenez à le faire image.png

Comme ça image.png

Parce que c'est image.png

référence

Cet article ressemble presque à cette deuxième décoction Vous faites une version tridimensionnelle des flocons de neige de Koch ici. https://qiita.com/hoji1107/items/99b2b669225d05990b5b J'ai étudié en modifiant ce code.

Cliquez ici pour une explication de la fractale elle-même https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%AB

La version anglaise est-elle meilleure pour Shelpinsky's Gasket? https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle

Recommended Posts

Comment créer une figure géométrique 3D en un clic [Du cône triangulaire à la fractale]
Comment faire une commande pour lire le fichier de paramètres avec pyramide
J'ai trouvé un moyen de créer un modèle 3D à partir d'une photo.
Comment créer un dictionnaire avec une structure hiérarchique.
Comment faire un jeu de tir avec toio (partie 1)
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
J'ai trouvé un moyen de créer un modèle 3D à partir d'une photo.0 Projection vers l'espace 3D
Comment créer un BOT Cisco Webex Teams à l'aide de Flask
Comment faire un simple jeu Flappy Bird avec Pygame
Je veux faire une macro de clic avec pyautogui (Outlook)
Comment faire une traduction japonais-anglais
Comment créer un bot slack
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Comment créer une fonction récursive
Essayez de créer un type de service Web avec un langage de balisage 3D
Comment créer une bibliothèque .dylib à partir d'une bibliothèque .a avec OSX (El Capitan)
[Blender] Comment créer un plug-in Blender
Comment créer un robot - Basic
Comment afficher les marques de légende en un avec le tracé Python 2D
Comment créer un clone depuis Github
Comment ajouter un package avec PyCharm
[Python] Comment rendre une classe itérable
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Faire une figure partiellement zoomée avec matplotlib
Comment créer un référentiel à partir d'un média
Comment créer un indicateur personnalisé Backtrader
Comment créer un plan de site Pelican
Créons une application Web de conversion A vers B avec Flask! De zéro ...
Comment déposer Google Docs dans un dossier dans un fichier .txt avec python
Connexion SSH au serveur cible à partir de Windows en un clic sur un raccourci
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
Comment créer un programme pour résoudre le Rubik Cube à partir de PC Koshien 2014 Floppy Cube
Une nouvelle forme d'application qui fonctionne avec GitHub: Comment créer des applications GitHub
Comment créer un système de dialogue dédié aux débutants
Comment envoyer un message à LINE avec curl
Un mémorandum pour faire WebDAV uniquement avec nginx
Comment ouvrir un navigateur Web à partir de python
Comment dessiner un graphique à 2 axes avec pyplot
Comment créer un objet fonction à partir d'une chaîne
Comment dessiner un graphique 3D avant l'optimisation
Comment développer une application de panier avec Django
Je veux faire un jeu avec Python
Comment générer un objet Python à partir de JSON
Essayez de créer un code de "décryptage" en Python
Comment créer un plug-in QGIS (génération de package)
Comment extraire le coefficient de la formule minute
Une doublure pour créer des images de Lena avec Scipy
J'ai lu "Comment créer un laboratoire de piratage"
Essayez de créer un groupe de dièdre avec Python
Procédure de création d'application multi-plateforme avec kivy
Comment convertir (32,32,3) en tenseur à 4 dimensions (1,32,32,1) avec le type ndarray
J'ai essayé de créer facilement une image 3D de haute précision avec une seule photo [0]. (Confirmé comment capturer l'espace, l'ombre)
(Mémorandum) Créer un diagramme de dispersion 3D avec matplodlib
[Mémo d'apprentissage] Comment créer une application avec Django ~ De l'environnement virtuel au push vers github ~
Combinez des chaînes répétitives en une seule avec des expressions régulières Python.
Comment convertir / restaurer une chaîne avec [] en python
Comment récupérer des données d'image de Flickr avec Python
Faisons un outil de veille de commande avec python
Comment créer un sous-menu avec le plug-in [Blender]