File:Diamond lattice.stl
![File:Diamond lattice.stl](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Diamond_lattice.stl/800px-Diamond_lattice.stl.png)
Dimensioni di questa anteprima PNG per questo file STL: 800 × 600 pixel. Altre risoluzioni: 320 × 240 pixel | 640 × 480 pixel | 1 024 × 768 pixel | 1 280 × 960 pixel | 2 560 × 1 920 pixel | 5 120 × 3 840 pixel.
File originale (5 120 × 2 880 pixel, dimensione del file: 181 KB, tipo MIME: application/sla)
![]() |
Questo file e la sua pagina di descrizione (discussione · modifica) si trovano su Wikimedia Commons (?) |
View Diamond lattice.stl on viewstl.com
Dettagli
DescrizioneDiamond lattice.stl |
English: A model of a diamond lattice comprising 2 x 2 x 2 unit cells by CMG Lee. Atoms are represented by tetrakis cuboctahedrons and bonds by triangular antiprisms. |
Data | |
Fonte | Opera propria |
Autore | Cmglee |
#!/usr/bin/env python
header = 'A model of a diamond lattice comprising 2 x 2 x 2 unit cells by CMG Lee.'
import re, struct, math
def fmt(string): ## string.format(**vars()) using tags {expression!format} by CMG Lee
def f(tag): i_sep = tag.rfind('!'); return (re.sub('\.0+$', '', str(eval(tag[1:-1])))
if (i_sep < 0) else ('{:%s}' % tag[i_sep + 1:-1]).format(eval(tag[1:i_sep])))
return (re.sub(r'(?<!{){[^{}]+}', lambda m:f(m.group()), string)
.replace('{{', '{').replace('}}', '}'))
def append(obj, string): return obj.append(fmt(string))
def tabbify(cellss, separator='|'):
cellpadss = [list(rows) + [''] * (len(max(cellss, key=len)) - len(rows)) for rows in cellss]
fmts = ['%%%ds' % (max([len(str(cell)) for cell in cols])) for cols in zip(*cellpadss)]
return '\n'.join([separator.join(fmts) % tuple(rows) for rows in cellpadss])
def hex_rgb(colour): ## convert [#]RGB to #RRGGBB and [#]RRGGBB to #RRGGBB
return '#%s' % (colour if len(colour) > 4 else ''.join([c * 2 for c in colour])).lstrip('#')
def viscam_colour(colour):
colour_hex = hex_rgb(colour)
colour_top5bits = [int(colour_hex[i:i+2], 16) >> 3 for i in range(1,7,2)]
return (1 << 15) + (colour_top5bits[0] << 10) + (colour_top5bits[1] << 5) + colour_top5bits[2]
def roundm(x, multiple=1):
if (isinstance(x, tuple)): return tuple(roundm(list(x), multiple))
elif (isinstance(x, list )): return [roundm(x_i, multiple) for x_i in x]
else: return int(math.floor(float(x) / multiple + 0.5)) * multiple
def rotate(facetss, deg_x, deg_y, deg_z): ## around x then y then z axes
(sin_x, cos_x) = (math.sin(math.radians(deg_x)), math.cos(math.radians(deg_x)))
(sin_y, cos_y) = (math.sin(math.radians(deg_y)), math.cos(math.radians(deg_y)))
(sin_z, cos_z) = (math.sin(math.radians(deg_z)), math.cos(math.radians(deg_z)))
facet_rotatess = []
for facets in facetss:
facet_rotates = []
for i_point in range(4):
(x, y, z) = [facets[3 * i_point + i_xyz] for i_xyz in range(3)]
if (x is None or y is None or z is None):
facet_rotates += [x, y, z]
else:
(y, z) = (y * cos_x - z * sin_x, y * sin_x + z * cos_x) ## rotate about x
(x, z) = (x * cos_y + z * sin_y, -x * sin_y + z * cos_y) ## rotate about y
(x, y) = (x * cos_z - y * sin_z, x * sin_z + y * cos_z) ## rotate about z
facet_rotates += [round(value, 9) for value in [x, y, z]]
facet_rotatess.append(facet_rotates)
return facet_rotatess
def translate(facetss, dx, dy, dz):
ds = [dx, dy, dz]
return [facets[:3] + [facets[3 * i_point + i_xyz] + ds[i_xyz]
for i_point in range(1,4) for i_xyz in range(3)]
for facets in facetss]
## Add facets
facet_stickss = [[None,0,0, -2,10,10, -40,40,48, -10, 2,10],
[None,0,0, -10, 2,10, -48,40,40, -10,10, 2],
[None,0,0, -10,10, 2, -40,48,40, -2,10,10]]
facet_stickss += translate(rotate(translate(facet_stickss, 25,-25,-25),
90,-90,90), -25,25,25)
facet_stickss += rotate(facet_stickss, 0, 0,180)
facet_stickss += rotate(facet_stickss, 0,180, 0)
facet_ball_triangless = [[None,0,0, 12,12,0, 0,12,12, 12,0,12]]
facet_ball_triangless += rotate(facet_ball_triangless , 90, 0, 0)
facet_ball_triangless += rotate(facet_ball_triangless , 180, 0, 0)
facet_ball_triangless += rotate(facet_ball_triangless , 0,180, 0)
facet_ball_diamondss = [[None,0,0, 17,0,0, 12,12,0, 12,0,12]]
facet_ball_diamondss += rotate(facet_ball_diamondss , 180, 0, 0)
facet_ball_diamondss += rotate(facet_ball_diamondss , 90, 0, 0)
facet_ball_diamondss += rotate(facet_ball_diamondss , 0,180, 0)
facet_ball_diamondss += rotate(facet_ball_diamondss , 0, 90, 0)
facet_ball_diamondss += rotate(facet_ball_diamondss[:8], 0, 0,90)
facet_ballss = facet_ball_diamondss + facet_ball_triangless
facet_stick_ballss = facet_stickss + facet_ballss
facet_cell_1ss = (translate(facet_ballss,100,100,0)
+ translate(facet_stick_ballss, 50,50,50))
facet_cell_1ss += translate(facet_cell_1ss, 100,100,0)
facet_cell_2ss = (translate(facet_ballss,200,100,100)
+ translate(facet_stick_ballss, 150,50,150))
facet_cell_2ss += translate(facet_cell_2ss, -100,100,0)
facet_cellss = facet_cell_1ss + facet_cell_2ss
facetss = facet_cellss
facetss += translate(facetss, 200, 0, 0)
facetss += translate(facetss, 0,200, 0)
facetss += translate(facetss, 0, 0,200)
facetss += (facet_ballss
+ translate(facet_ballss, 0,200, 0)
+ translate(facet_ballss, 0,100,100)
+ translate(facet_ballss, 0,300,100)
+ translate(facet_ballss, 0, 0,200)
+ translate(facet_ballss, 0,200,200)
+ translate(facet_ballss, 0,400,200)
+ translate(facet_ballss, 0,100,300)
+ translate(facet_ballss, 0,300,300)
+ translate(facet_ballss, 0,200,400)
+ translate(facet_ballss, 0,400,400)
+ translate(facet_ballss, 200, 0, 0)
+ translate(facet_ballss, 100, 0,100)
+ translate(facet_ballss, 300, 0,100)
+ translate(facet_ballss, 0, 0,200)
+ translate(facet_ballss, 200, 0,200)
+ translate(facet_ballss, 400, 0,200)
+ translate(facet_ballss, 100, 0,300)
+ translate(facet_ballss, 300, 0,300)
+ translate(facet_ballss, 200, 0,400)
+ translate(facet_ballss, 400, 0,400)
+ translate(facet_ballss, 100,100,400)
+ translate(facet_ballss, 100,300,400)
+ translate(facet_ballss, 200,200,400)
+ translate(facet_ballss, 300,100,400)
+ translate(facet_ballss, 400,200,400)
+ translate(facet_ballss, 300,300,400)
+ translate(facet_ballss, 200,400,400)
)
## Calculate normals
for facets in facetss:
if (facets[0] is None or facets[1] is None or facets[2] is None):
us = [facets[i_xyz + 9] - facets[i_xyz + 6] for i_xyz in range(3)]
vs = [facets[i_xyz + 6] - facets[i_xyz + 3] for i_xyz in range(3)]
normals = [us[1]*vs[2] - us[2]*vs[1], us[2]*vs[0] - us[0]*vs[2], us[0]*vs[1] - us[1]*vs[0]]
normal_length = sum([component * component for component in normals]) ** 0.5
facets[:3] = [round(component / normal_length, 10) for component in normals]
# print(tabbify([['%s%d' % (xyz, n) for n in range(3) for xyz in list('XYZ')] +
# ['N%s' % (xyz) for xyz in list('xyz')] + ['s0f']] + facetss))
## Compile STL
outss = ([['STL\n\n%-73s\n\n' % (header[:73]), struct.pack('<L', len(facetss))]] +
[[struct.pack('<f', float(value)) for value in facets[:12]] +
[struct.pack('<H', 0 if (len(facets) <= 12) else
viscam_colour(facets[12]))] for facets in facetss])
out = ''.join([out for outs in outss for out in outs])
print('# bytes:%d\t# facets:%d\ttitle: %s' % (len(out), len(facetss), header[:73]))
with open(__file__[:__file__.rfind('.')] + '.stl', 'wb') as f_out: f_out.write(out)
# f_out.write('%s\n## Python script to generate STL\n%s\n' % (''.join(outs), open(__file__).read()))
Licenza
Io, detentore del copyright su quest'opera, dichiaro di pubblicarla con la seguente licenza:
![w:it:Creative Commons](https://upload.wikimedia.org/wikipedia/commons/thumb/7/79/CC_some_rights_reserved.svg/90px-CC_some_rights_reserved.svg.png)
![attribuzione](https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Cc-by_new_white.svg/24px-Cc-by_new_white.svg.png)
![condividi allo stesso modo](https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Cc-sa_white.svg/24px-Cc-sa_white.svg.png)
Questo file è disponibile in base alla licenza Creative Commons Attribuzione-Condividi allo stesso modo 4.0 Internazionale
- Tu sei libero:
- di condividere – di copiare, distribuire e trasmettere quest'opera
- di modificare – di adattare l'opera
- Alle seguenti condizioni:
- attribuzione – Devi fornire i crediti appropriati, un collegamento alla licenza e indicare se sono state apportate modifiche. Puoi farlo in qualsiasi modo ragionevole, ma non in alcun modo che suggerisca che il licenziante approvi te o il tuo uso.
- condividi allo stesso modo – Se remixi, trasformi o sviluppi il materiale, devi distribuire i tuoi contributi in base alla stessa licenza o compatibile all'originale.
![]() |
Colui che ha caricato questo file si è impegnato a rispettare la licenza per i brevetti 3D della Wikimedia Foundation: Questo file e gli oggetti 3D in esso rappresentati sono entrambi frutto del mio proprio lavoro. Con la presente concedo a ogni utente, produttore o distributore dell'oggetto raffigurato nel file una licenza mondiale, gratuita, completamente pagata, non esclusiva, irrevocabile e perpetua senza alcun costo aggiuntivo in base a qualsiasi brevetto o domanda di brevetto che posseda ora o in futuro, per fare, aver fatto, utilizzare, offrire di vendere, vendere, importare e distribuire questo file e qualsiasi oggetto 3D raffigurato nel file che potrebbe altrimenti violerebbe qualsiasi pretesa di brevetti di cui sono titolare ora o in futuro. Si noti che in caso di divergenze di significato o di interpretazione tra la versione originale in inglese di questa licenza e una sua traduzione, la versione originale in inglese è prevalente. |
Didascalie
Aggiungi una brevissima spiegazione di ciò che questo file rappresenta
Elementi ritratti in questo file
raffigura
Valore sconosciuto senza un elemento Wikidata
18 mar 2018
Cronologia del file
Fare clic su un gruppo data/ora per vedere il file come si presentava nel momento indicato.
Data/Ora | Miniatura | Dimensioni | Utente | Commento | |
---|---|---|---|---|---|
attuale | 02:14, 19 mar 2018 | ![]() | 5 120 × 2 880 (181 KB) | Cmglee | User created page with UploadWizard |
Pagine che usano questo file
La seguente pagina usa questo file:
Utilizzo globale del file
Anche i seguenti wiki usano questo file:
- Usato nelle seguenti pagine di as.wikipedia.org:
- Usato nelle seguenti pagine di bh.wikipedia.org:
- Usato nelle seguenti pagine di cs.wikipedia.org:
- Usato nelle seguenti pagine di en.wikipedia.org:
- Usato nelle seguenti pagine di fa.wikipedia.org:
- Usato nelle seguenti pagine di fi.wikipedia.org:
- Usato nelle seguenti pagine di om.wikipedia.org:
- Usato nelle seguenti pagine di www.wikidata.org:
Estratto da "https://it.wikipedia.org/wiki/File:Diamond_lattice.stl"