Versuchen Sie, mit Rhinoceros / Grasshopper / GHPython ein sphärisches Gitter zu erstellen

Einführung

Ich habe ein Skript geschrieben, um ein sphärisches Gitter gemäß der angegebenen Anzahl zu erstellen und dort 3D-Objekte anzuordnen. Ich werde die Methode aufschreiben.

Daten

[Eingang] Name: obj, Datenzugriff: Elementzugriff, Typhinweis: GeometryBase, desc: Zu arrangierende Objekte name: num, Datenzugriff: Elementzugriff, Typhinweis: int, desc: Anzahl der Gitter Name: rad, Datenzugriff: Elementzugriff, Typhinweis: float, desc: Kugelradius [Ausgabe] name: objs, desc: Objekte, die auf einer Kugel angeordnet sind name: pts, dec: sphärisch angeordnete Punkte

import ghpythonlib.components as ghcomp
import Rhino
import math

objList = []
ptList = []
for i in range(num):
    #In einer Kugelform anordnen
    y = i * 2 / num - 1 + (1 / num)
    r = math.sqrt(1 - y * y)
    phi = i * math.pi * (3 - math.sqrt(5));
    x = math.cos(phi) * r;
    z = math.sin(phi) * r;
    
    #Nach Radius skalieren
    x = x * rad;
    y = y * rad;
    z = z * rad;
    position = Rhino.Geometry.Point3d(x, y, z);
    ptList.append(position)
    
    #Objekte platzieren
    clone = obj.Duplicate()
    center = clone.GetBoundingBox(True).Center
    dir = Rhino.Geometry.Vector3d(position) - Rhino.Geometry.Vector3d(center)
    dir.Unitize()
    clone = ghcomp.OrientDirection(clone,center,Rhino.Geometry.Vector3d(0,0,1),position,dir)[0]
    
    objList.append(clone)

objs = objList
pts = ptList

Screen Shot 2015-09-01 at 04.55.21.png Screen Shot 2015-09-01 at 04.55.47.png

Kommentar

import ghpythonlib.components as ghcomp
import Rhino
import math

objList = []
ptList = []
...

Importieren Sie die diesmal verwendete Bibliothek und erstellen Sie zwei leere Listen.

...

for i in range(num):
    #In einer Kugelform anordnen
    y = i * 2 / num - 1 + (1 / num)
    r = math.sqrt(1 - y * y)
    phi = i * math.pi * (3 - math.sqrt(5));
    x = math.cos(phi) * r;
    z = math.sin(phi) * r;
...

Der Hauptteil ist dieser Teil, in dem die Basis des sphärischen Gitters gebildet wird.

...
    #Nach Radius skalieren
    x = x * rad;
    y = y * rad;
    z = z * rad;
    position = Rhino.Geometry.Point3d(x, y, z);
    ptList.append(position)

Die Basis wird entsprechend der Größe des Radius skaliert. Danach habe ich die Punkte, die ich gemacht habe, in ptList eingefügt.

...
    #Objekte platzieren
    clone = obj.Duplicate()
    center = clone.GetBoundingBox(True).Center
    dir = Rhino.Geometry.Vector3d(position) - Rhino.Geometry.Vector3d(center)
    dir.Unitize()
    clone = ghcomp.OrientDirection(clone,center,Rhino.Geometry.Vector3d(0,0,1),position,dir)[0]
    
    objList.append(clone)
...

Ich habe das Basisobjekt dupliziert und die GH-Komponente Orient Direction verwendet, um es an den Punkten im Raster auszurichten, die ich gerade erstellt habe. Fügen Sie schließlich das duplizierte Objekt zur Liste hinzu.

...
objs = objList
pts = ptList

Schließlich wird die Liste ausgegeben.

herunterladen

SphericalGrid.gh

Recommended Posts

Versuchen Sie, mit Rhinoceros / Grasshopper / GHPython ein sphärisches Gitter zu erstellen
Lassen Sie uns eine GUI mit Python erstellen.
Machen wir einen Blockbruch mit wxPython
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Lassen Sie uns mit Python langsam sprechen
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
Erstellen Sie ein Webframework mit Python! (1)
Machen wir mit Pylearn 2 eine dreiäugige KI
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Lassen Sie uns das Abhängigkeitsmanagement mit pip etwas einfacher machen
Lassen Sie uns eine Mac-App mit Tkinter und py2app erstellen
[Super einfach] Machen wir einen LINE BOT mit Python.
Machen wir Othello mit wxPython
Machen Sie eine Lotterie mit Python
Machen Sie ein Feuer mit kdeplot
Lassen Sie uns mit Python einen Web-Socket-Client erstellen. (Zugriffstoken-Authentifizierung)
Lassen Sie uns ein Diagramm erstellen, auf das mit IPython geklickt werden kann
Machen wir eine Remote-Rumba [Hardware]
Machen Sie einen Sound mit Jupyter Notebook
Machen wir einen Fahrradcomputer mit Raspberry Pi Zero (W, WH)
Machen wir einen Spot Sale Service 2
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Machen wir einen Spot Sale Service 1
Machen wir Othellos KI mit Chainer-Teil 1-
Erstellen Sie ein Empfehlungssystem mit Python
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Machen Sie einen Filter mit einer Django-Vorlage
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Machen wir Othellos KI mit Chainer-Teil 2-
Erstellen Sie mit PySide einen Modelliterator
Machen Sie eine schöne Grafik mit Plotly
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!
Machen wir einen Spot Sale Service 3
[Ev3dev] Lassen Sie uns ein Fernsteuerungsprogramm von Python mit dem RPyC-Protokoll erstellen
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV
Erstellen wir mit Python eine kostenlose Gruppe
Machen Sie einen seltenen Gacha-Simulator mit Flask
Erstellen Sie eine Notebook-Pipeline mit Kedro + Papermill
Lassen Sie uns mit Docker eine dynamische Site kratzen
Machen Sie ein Zeichnungsquiz mit kivy + PyTorch
Erstellen Sie einen Kaskadenklassifizierer mit Google Colaboratory
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen
Machen Sie Ja Nein Popup mit Kivy
Lassen Sie uns mit flask-babel eine mehrsprachige Site erstellen
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Erstellen Sie eine GIF-Animation mit Ordnerüberwachung
Lassen Sie uns eine Kombinationsberechnung mit Python durchführen
Erstellen Sie eine Desktop-App mit Python mit Electron
Lassen Sie uns ein Backend-Plug-In für Errbot erstellen
Lassen Sie uns mit Flask eine Webanwendung zur Konvertierung von A nach B erstellen! Von Grund auf neu ...
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 2] ~ Vue setup ~ eine nervenschwächende App erstellen
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 1] ~ Django-Setup ~ eine nervenschwächende App erstellen
Machen wir eine nervenschwächende Anwendung mit Vue.js und Django-Rest-Framework [Teil 6] ~ Benutzerauthentifizierung 2 ~