Fișier:Sphericon.stl
De la testwiki
Sari la navigare
Sari la căutare
Sphericon.stl (mărime fișier: 31 KB, tip MIME: application/sla)
Atenție: Acest tip de fișier poate conține cod periculos.
Executându-l, sistemul dvs. poate fi compromis.
Acest fișier provine de la Wikimedia Commons și poate fi folosit și în cadrul altor proiecte. Descrierea de mai jos poate fi consultată la pagina de descriere a fișierului.
View Sphericon.stl on viewstl.com
Descriere fișier
| DescriereSphericon.stl |
English: An ASCII STL of a sphericon by CMG Lee. |
| Dată | |
| Sursă | Operă proprie |
| Autor | Cmglee |
#!/usr/bin/env python
solid_name = 'ASCII_STL_of_a_sphericon_by_CMG_Lee'
n_face_side = 60
r = 1000
import re, io, 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 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
facetss = []
## Find facets
for i_face_side in range(n_face_side + 1):
rad = math.pi * i_face_side / n_face_side
(r_sin,r_cos) = roundm([r * function(rad) for function in [math.sin,math.cos]])
if (i_face_side > 0):
facetss.append([1000 + i_face_side, r, 0,0, 0,-r_cos_old,-r_sin_old, 0,-r_cos,-r_sin])
facetss.append([2000 + i_face_side, -r, 0,0, 0, r_cos_old,-r_sin_old, 0, r_cos,-r_sin])
facetss.append([3000 + i_face_side, 0, r,0, -r_cos_old,0, r_sin_old, -r_cos,0, r_sin])
facetss.append([4000 + i_face_side, 0,-r,0, r_cos_old,0, r_sin_old, r_cos,0, r_sin])
(r_sin_old,r_cos_old) = (r_sin,r_cos)
## Calculate normals
for facets in facetss:
us = [facets[i_xyz + 3] - facets[i_xyz] for i_xyz in range(3)]
vs = [facets[i_xyz] - facets[i_xyz + 6] 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 += ['%.5f' % (component / normal_length) for component in normals]
facetss = sorted(facetss)
print(tabbify([['s.f'] + ['%s%d' % (xyz, n) for n in range(3) for xyz in list('XYZ')] +
['N%s' % (xyz) for xyz in list('xyz')]] + facetss))
## Compile STL
outs = [fmt('''\
facet normal {facets[10]} {facets[11]} {facets[12]}
outer loop
vertex {facets[1]} {facets[2]} {facets[3]}
vertex {facets[4]} {facets[5]} {facets[6]}
vertex {facets[7]} {facets[8]} {facets[9]}
endloop
endfacet''') for facets in facetss]
with io.open(__file__[:__file__.rfind('.')] + '.stl', 'w', newline='\n') as f_out:
f_out.write('solid %s\n%s\nendsolid %s\n\n## Please keep Python script below\n%s' %
(solid_name, '\n'.join(outs), solid_name, io.open(__file__).read()))
Licențiere
Eu, deținătorul drepturilor de autor ale acestei opere, prin prezenta îmi public lucrarea sub următoarea licență:
Acest fișier a fost eliberat sub licența Creative Commons Atribuire și distribuire în condiții identice 4.0 Internațională.
- Sunteți liber:
- să partajați cu alții – aveți dreptul de a copia, distribui și transmite opera
- să adaptați – aveți dreptul de a adapta opera
- În următoarele condiții:
- atribuind – Trebuie să atribuiți opera corespunzător, introducând o legătură către licență și indicând dacă ați făcut schimbări. Puteți face asta prin orice metodă rezonabilă, dar nu într-un fel care ar sugera faptul că persoana ce a licențiat conținutul v-ar susține sau ar aproba folosirea de către dumneavoastră a operei sale.
- partajând în condiții identice – Dacă modificați, transformați sau creați pe baza acestei opere, trebuie să distribuiți opera rezultată doar sub aceeași licență sau sub o licență similară acesteia.
| The uploader of this file has agreed to the Wikimedia Foundation 3D patent license: This file and any 3D objects depicted in the file are both my own work. I hereby grant to each user, maker, or distributor of the object depicted in the file a worldwide, royalty-free, fully-paid-up, nonexclusive, irrevocable and perpetual license at no additional cost under any patent or patent application I own now or in the future, to make, have made, use, offer to sell, sell, import, and distribute this file and any 3D objects depicted in the file that would otherwise infringe any claims of any patents I hold now or in the future. Please note that in the event of any differences in meaning or interpretation between the original English version of this license and a translation, the original English version takes precedence. |
Captions
Add a one-line explanation of what this file represents
An ASCII STL of a sphericon
Items portrayed in this file
subiectul reprezentat
16 martie 2018
Istoricul fișierului
Apăsați pe Data și ora pentru a vedea versiunea fișierului trimisă la momentul respectiv.
| Data și ora | Dimensiuni | Utilizator | Comentariu | |
|---|---|---|---|---|
| actuală | 16 martie 2018 02:47 | (31 KB) | wikimediacommons>Cmglee | User created page with UploadWizard |
Utilizarea fișierului
Nicio pagină nu utilizează acest fișier.