[PYTHON] So erstellen Sie eine geometrische 3D-Figur mit einem Klick [Vom dreieckigen Kegel zum Fraktal]

Fazit

Verwenden Sie Blender Python image.png

Angaben des Autors

・ Nichtinformationssystem ・ Ich habe noch nie mit dem 3D-Modell herumgespielt ・ Natürlich ist Mixer fast das erste Mal

Es ist einfach, weil Sie dies tun können!

Was hier zu machen

Erstellen Sie eine 3D-Version der oben genannten "Shelpinsky-Dichtung"

Wie macht man

Ich denke, dass der Bildschirm des Mixers in mehrere Teile unterteilt ist, aber Sie können ihn interaktiv ausführen, indem Sie "Python-Konsole" aus der Umschaltung auswählen. image.png

Es gibt jedoch viele Dinge, die damit nicht möglich sind. Wenn Sie also "Texteditor" als Empfehlung auswählen, wird Folgendes angezeigt! image.png Klicken Sie hier unten auf die Schaltfläche "Neu". Das ist alles was Sie tun müssen.

Code

Es gibt verschiedene Notationen, aber es ist grundsätzlich einfach. Schauen wir uns zuerst das Ganze an.

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') 

Ich werde in der Reihenfolge erklären

1. Bibliothek

import bpy
from math import sqrt

Ich importiere hier ein Modul namens bpy, das eine Blender-Funktion ist. Diese werden von Anfang an ohne Verwendung von pip installiert. Importieren Sie sie also, ohne über irgendetwas nachzudenken. Weitere Grundmodule sind von Anfang an enthalten. Hier importiere ich Mathematik, weil ich die Quadratwurzel ziehen musste, um die Position des Schwerpunkts des Dreiecks zu finden. Pandas usw. sind nicht enthalten. Sie können es tun, wenn Sie es selbst installieren möchten, aber wir werden es hier nicht behandeln.

2. Methode

Und wie machst du das? Ich denke, es wird eine Geschichte, aber tatsächlich ist die Antwort bereits vorbereitet. Wenn ich mit Blender spiele, wird der Code angezeigt, und dies ist die Methode, die dieser Operation entspricht. Zum Beispiel

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))

Dies entspricht jedoch dem Kegel der primitiven Figur. Da Sie es nur anhand des Popups verstehen können, denke ich, dass es ein Fluss sein wird, einen Teil selbst zu erstellen → zu automatisieren. Daher werden diejenigen, die den Mixer frei manipulieren können, nicht so schwierig sein, und diejenigen, die dies nicht tun, werden eher in Betrieb genommen als codiert.

3. Notation

Dies ist fast kein Ersatz für gewöhnliche Python. Um es ganz klar auszudrücken, es ist schwer zu sagen, was beim Debuggen falsch ist. Seien Sie also geduldig. Es verbraucht unerwartet Speicher. Wenn Sie ihn also nicht gut schreiben, ist der Vorgang in der Regel langsam. Obwohl ich diesmal einen richtigen PC benutze, wird er nicht sofort ausgegeben, sondern nach einem Schlag.

4. VCI-Konvertierung

Danach geben Sie einfach fbx aus und tauchen in die Einheit ein, aber seien Sie vorher vorsichtig Wenn Sie vci verwenden, scheint es, dass wenn die Anzahl der Unterelemente zu groß ist, es plötzlich schwer wird, und in meiner Umgebung, wenn ich 800 einsetze, wird es ein Chaos sein. Und die Anzahl der Objekte in Fractal steigt schnell an, wenn Sie nur die Anzahl der Stockwerke berühren. (Dieses Mal befindet es sich im 7. Stock, aber wenn Sie es nicht zusammensetzen, wird die virtuelle Besetzung gelöscht ...) Es ist also besser, die erstellten Objekte am Ende zusammenzusetzen. Zusammenfügen

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

Usw. wäre praktisch. Selbst wenn es schwer ist, wird es nicht zu langsam sein, da es nur schwer geladen wird. Wenn jedoch viele Objekte vorhanden sind, ist es langsam und in einigen Fällen wird der Online-Startwert abgelehnt. Die Fehlermeldung zu diesem Zeitpunkt lautete "Blockgröße ist zu groß".

20191013-220416_89.png Ich habe es damit in die VR-Welt gebracht

Entwicklung

Wenn Sie lernen, wie es geht image.png

So was image.png

Weil das so ist image.png

Referenz

Dieser Artikel ist fast wie diese zweite Abkochung Sie machen hier eine dreidimensionale Version von Kochs Schneeflocken. https://qiita.com/hoji1107/items/99b2b669225d05990b5b Ich habe studiert, während ich diesen Code geändert habe.

Klicken Sie hier, um eine Erklärung des Fraktals selbst zu erhalten https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%AB

Ist die englische Version besser für Shelpinskys Dichtung? https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle

Recommended Posts

So erstellen Sie eine geometrische 3D-Figur mit einem Klick [Vom dreieckigen Kegel zum Fraktal]
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
Ich habe mir eine Möglichkeit ausgedacht, aus einem Foto ein 3D-Modell zu erstellen.
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
Wie man ein Schießspiel mit toio macht (Teil 1)
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
Ich habe mir eine Möglichkeit ausgedacht, aus einem Foto ein 3D-Modell zu erstellen. 0 Projektion in den 3D-Raum
So erstellen Sie mit Flask einen BOT für Cisco Webex-Teams
Wie man ein einfaches Flappy Bird-Spiel mit Pygame macht
Ich möchte ein Klickmakro mit pyautogui (Outlook) erstellen.
Wie erstelle ich eine japanisch-englische Übersetzung?
Wie man einen lockeren Bot macht
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
So erstellen Sie eine rekursive Funktion
Versuchen Sie, einen Web-Service-ähnlichen Typ mit 3D-Markup-Sprache zu erstellen
So erstellen Sie eine .dylib-Bibliothek aus einer .a-Bibliothek mit OSX (El Capitan)
[Blender] So erstellen Sie ein Blender-Plug-In
Wie erstelle ich einen Crawler?
Anzeigen von Legendenmarkierungen in einem mit Python 2D-Plot
So erstellen Sie einen Klon aus Github
So fügen Sie ein Paket mit PyCharm hinzu
[Python] Wie man eine Klasse iterierbar macht
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
Machen Sie mit matplotlib eine teilweise gezoomte Figur
So erstellen Sie ein Repository aus Medien
So erstellen Sie einen benutzerdefinierten Backtrader-Indikator
Wie erstelle ich eine Pelican Site Map?
Lassen Sie uns mit Flask eine Webanwendung zur Konvertierung von A nach B erstellen! Von Grund auf neu ...
So legen Sie Google Text & Tabellen in einem Ordner zusammen in einer TXT-Datei mit Python ab
SSH-Anmeldung am Zielserver von Windows mit einem Klick auf eine Verknüpfung
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
So erstellen Sie ein Programm zum Lösen des Rubik Cube ab PC Koshien 2014 Floppy Cube
Eine neue Form der App, die mit GitHub funktioniert: So erstellen Sie GitHub-Apps
Wie man ein Dialogsystem für Anfänger erstellt
So senden Sie eine Nachricht mit Curl an LINE
Ein Memorandum, um WebDAV nur mit Nginx zu erstellen
So öffnen Sie einen Webbrowser über Python
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
So zeichnen Sie vor der Optimierung ein 3D-Diagramm
So entwickeln Sie eine Cart-App mit Django
Ich möchte ein Spiel mit Python machen
So generieren Sie ein Python-Objekt aus JSON
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
So erstellen Sie ein QGIS-Plug-In (Paketerzeugung)
So extrahieren Sie den Koeffizienten aus der Minutenformel
Ein Liner, um Lena-Bilder mit scipy zu machen
Ich las "Wie man ein Hacking Lab macht"
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Konvertieren von (32,32,3) in einen 4-dimensionalen Tensor (1,32,32,1) mit ndarray-Typ
Ich habe versucht, mit einem Foto einfach ein hochpräzises 3D-Bild zu erstellen [0]. (Bestätigt, wie der Raum erfasst und beschattet wird)
(Memorandum) Erstellen Sie mit matplodlib ein 3D-Streudiagramm
[Lernnotiz] So erstellen Sie eine Anwendung mit Django ~ Von der virtuellen Umgebung bis zum Pushing zu Github ~
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So kratzen Sie Bilddaten von Flickr mit Python
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]