Essayez de créer une grille sphérique avec Rhinoceros / Grasshopper / GHPython

introduction

J'ai écrit un script pour créer une grille sphérique selon le nombre spécifié et y disposer les objets 3D. J'écrirai la méthode.

Les données

[contribution] name: obj, Data Access: Item Access, Indice de type: GeometryBase, desc: Objets à organiser name: num, Data Access: Item Access, Indice de type: int, desc: Nombre de grilles name: rad, Data Access: Item Access, Indice de type: float, desc: Sphere radius [Production] name: objs, desc: Objets disposés sur une sphère nom: pts, déc: points disposés de manière sphérique

import ghpythonlib.components as ghcomp
import Rhino
import math

objList = []
ptList = []
for i in range(num):
    #Disposer en forme sphérique
    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;
    
    #Échelle selon le rayon
    x = x * rad;
    y = y * rad;
    z = z * rad;
    position = Rhino.Geometry.Point3d(x, y, z);
    ptList.append(position)
    
    #Placer des objets
    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

Commentaire

import ghpythonlib.components as ghcomp
import Rhino
import math

objList = []
ptList = []
...

Importez la bibliothèque utilisée cette fois et créez deux listes vides.

...

for i in range(num):
    #Disposer en forme sphérique
    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;
...

Le principal est cette partie, où est faite la base de la grille sphérique.

...
    #Échelle selon le rayon
    x = x * rad;
    y = y * rad;
    z = z * rad;
    position = Rhino.Geometry.Point3d(x, y, z);
    ptList.append(position)

La base est mise à l'échelle en fonction de la taille du rayon. Après cela, j'ai mis les points que j'ai faits dans ptList.

...
    #Placer des objets
    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)
...

J'ai dupliqué l'objet de base et utilisé la direction d'orientation du composant GH pour l'orienter aux points de la grille que je viens de créer. Enfin, ajoutez l'objet dupliqué à la liste.

...
objs = objList
pts = ptList

Enfin, la liste est sortie.

Télécharger

SphericalGrid.gh

Recommended Posts

Essayez de créer une grille sphérique avec Rhinoceros / Grasshopper / GHPython
Faisons une interface graphique avec python.
Faisons une rupture de bloc avec wxPython
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Faisons un jeu de shiritori avec Python
Faisons la voix lentement avec Python
Faisons un langage simple avec PLY 1
Créez un framework Web avec Python! (1)
Faisons une IA à trois yeux avec Pylearn 2
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
Remplaçons UWSC par Python (5) Faisons un robot
[Jouons avec Python] Créer un livre de comptes de ménage
Essayez de créer un jeu simple avec Python 3 et iPhone
Facilitons un peu la gestion des dépendances avec pip
Créons une application Mac avec Tkinter et py2app
[Super facile] Faisons un LINE BOT avec Python.
Faisons Othello avec wxPython
Faites une loterie avec Python
Faire un feu avec kdeplot
Créons un client de socket Web avec Python. (Authentification par jeton d'accès)
Faisons un diagramme sur lequel on peut cliquer avec IPython
Faisons une rumba distante [Matériel]
Faites un son avec le notebook Jupyter
Faisons un ordinateur de vélo avec Raspberry Pi Zero (W, WH)
Faisons un service de vente au comptant 2
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 2
Faisons un service de vente au comptant 1
Faisons l'IA d'Othello avec Chainer-Part 1-
Créer un système de recommandation avec python
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 3
Créer un filtre avec un modèle django
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 4
Faisons l'IA d'Othello avec Chainer-Part 2-
Créer un itérateur de modèle avec PySide
Faire un joli graphique avec plotly
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
Faisons un service de vente au comptant 3
[Ev3dev] Faisons un programme de contrôle à distance par Python avec le protocole RPyC
Créer un lecteur vidéo avec PySimpleGUI + OpenCV
Créons un groupe gratuit avec Python
Créez un simulateur de gacha rare avec Flask
Créez un pipeline de notebook avec Kedro + Papermill
Raclons un site dynamique avec Docker
Créez un quiz de dessin avec kivy + PyTorch
Créez un classificateur en cascade avec Google Colaboratory
[Python] Rendons matplotlib compatible avec le japonais
Faire Oui Non Popup avec Kivy
Faisons un site multilingue en utilisant flask-babel
Faire une minuterie de lavage-séchage avec Raspberry Pi
Créer une animation GIF avec surveillance des dossiers
Faisons un calcul de combinaison avec Python
Créez une application de bureau avec Python avec Electron
Faisons un plug-in backend pour Errbot
Créons une application Web de conversion A vers B avec Flask! De zéro ...
Créons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 2] ~ Configuration de Vue ~
Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 1] ~ Django setup ~
Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 6] ~ Authentification utilisateur 2 ~