Le programme suivant sera utilisé pour la recherche en physique collégiale. Je travaille donc sur un projet de recherche qui consiste à créer des cellules unitaires de forme rectangulaire. Pour l'instant je travaille avec une grille cubique 3d. Mon but est de rendre plus adjacents les uns aux autres.Création d'une matrice de cubes
Voici mon code actuel (qui vous les gars DÉCÉDÉES): En ce moment, il ne fait qu'un cube, peut placer des points aléatoires sur les sommets de la grille cubique, et il peut calculer la distance entre les points. Comment pourrais-je obtenir matplotlib pour produire plus de ceux-ci? Aussi, je dois être capable de mettre des points sur les cubes multiples et je devrais être capable de calculer la distance d'un point dans le cube A à un point dans le cube B. Serais-je capable de produire plusieurs cubes dans le même matplotlib par juste faire une boucle while? Aussi, à quoi cela ressemblerait-il en utilisant des tableaux numpy? Je me sens comme si les tableaux chiffrés seraient faciles à créer, mais je ne peux pas tout à fait enrouler ma tête autour d'elle. Code I ont jusqu'à présent:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations
from matplotlib.patches import FancyArrowPatch
from mpl_toolkits.mplot3d import proj3d
parameter = np.arange(0,11,1)
xx, yy, zz = np.meshgrid(parameter, parameter, parameter)
valuesrange = np.zeros((11, 11, 11))
valuesrange2 = np.zeros((11, 11, 11))
count = 0
while (count < 2):
xint = np.random.randint(0,2)
yint = np.random.randint(0,2)
zint = np.random.randint(0,2)
if xint > 0:
xint = np.random.randint(10,11, 22)
else:
xint = np.random.randint(0,1, 22)
if yint >0:
yint = np.random.randint(10,11, 22)
else:
yint = np.random.randint(0,1, 22)
if zint > 0:
zint = np.random.randint(10,11, 22)
else:
zint = np.random.randint(0,1, 22)
count = count + 1
print(xint, yint, zint)
xint2 = np.random.randint(0,2)
yint2 = np.random.randint(0,2)
zint2 = np.random.randint(0,2)
if xint2 > 0:
xint2 = np.random.randint(10,11, 22)
else:
xint2 = np.random.randint(0,1, 22)
if yint2 >0:
yint2 = np.random.randint(10,11, 22)
else:
yint2 = np.random.randint(0,1, 22)
if zint2 > 0:
zint2 = np.random.randint(10,11, 22)
else:
zint2 = np.random.randint(0,1, 22)
print (count)
print(xint2, yint2, zint2)
distance = ((xint2-xint)**2 + (yint2 - yint)**2 + (zint2 - zint)**2)**.5
print ('distance:')
print (distance)
#xint = np.random.randint(0, 11, 22)
#yint = np.random.randint(0, 11, 22)
#zint = np.random.randint(0, 11, 22)
#distance formula = ((x2-x1)**2 + (y2 - y1)**2 + (z2 - z1)**2)**.5
valuesrange[[xint, yint, zint]]= np.random.random(22)
valuesrange[[xint, yint, zint]]= np.random.random(22)
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
im = ax.scatter(xx, yy, zz, c = valuesrange, cmap=plt.cm.spectral_r,
edgecolor = 'none', alpha = .7)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.colorbar(im)
fig.show()
#plt.show()
Désolé de ne pas être clair. Je pense que la partie que vous ne pouvez pas obtenir est les instructions if/else. Ces instructions produisent des points aléatoires sur les sommets du cube. Aussi, quelle est l'utilisation des deux différentes distributions de points dans votre grille cubique? Sont-ils censés représenter Unitcells? Merci. – Astupidhippo
Je n'ai aucune idée de ce qu'ils représentent. Vous avez demandé une méthode pour créer plus d'un cube et cette réponse fournit une telle méthode. J'ai fait ces deux cubes différents, mais c'est juste pour montrer comment utiliser les paramètres, parce que je ne sais pas (et je n'ai pas besoin de savoir) le but de tout cela. – ImportanceOfBeingErnest
OK. Je pense que je comprends maintenant (en particulier les paramètres). Merci pour l'aide. – Astupidhippo