Файл:Rhombic triacontahedron box.stl
Вміст сторінки не підтримується іншими мовами.
Зовнішній вигляд
Матеріал з Вікіпедії — вільної енциклопедії.

Розмір цього попереднього перегляду PNG для вихідного STL-файлу: 800 × 600 пікселів. Інші роздільності: 320 × 240 пікселів | 640 × 480 пікселів | 1024 × 768 пікселів | 1280 × 960 пікселів | 2560 × 1920 пікселів | 5120 × 3840 пікселів.
Повна роздільність (5120 × 2880 пікселів, розмір файлу: 14 КБ, MIME-тип: application/sla)
![]() | Відомості про цей файл містяться на Вікісховищі — централізованому сховищі вільних файлів мультимедіа для використання в проектах Фонду Вікімедіа. |
View Rhombic triacontahedron box.stl on viewstl.com
Опис файлу
ОписRhombic triacontahedron box.stl |
English: A rhombic triacontahedron made of 6 panels around a cubic hole by CMG Lee. Zoom into the model to see the cubic hole. |
Час створення | |
Джерело | Власна робота |
Автор | Cmglee |
Python source
#!/usr/bin/env python
header = 'A rhombic triacontahedron made of 6 panels around a cubic hole by CMG Lee.'
a = 233 ## half rhombus minor diagonal
b = 377 ## half rhombus major diagonal
c = 55 ## half peg base width
d = 30 ## displacement of panels
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 flatten(lss): return [l for ls in lss for l in ls]
def rotate(facetss, degs): ## around x then y then z axes
(deg_x,deg_y,deg_z) = degs
(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, ds): ## 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]
def flip(facetss):
return [facets[:3] + facets[6:9] + facets[3:6] + facets[9:] for facets in facetss]
## Add facets
facet_pegss = [[None,0,0, b+c*2, 0,-b, b+c,-c,0, b+c, c,0], ## peg
[None,0,0, b+c*2, 0,-b, b+c, c,0, b+c*3, 0,0], ## peg
[None,0,0, b+c*2, 0,-b, b+c*3, 0,0, b+c,-c,0], ## peg
[None,0,0, b, b, 0, a+b, 0,0, b+c*3, 0,0], ## bottom
[None,0,0, b, b, 0, b+c*3, 0,0, b+c, c,0], ## bottom
[None,0,0, b, b, 0, b+c, c,0, b+c,-c,0], ## bottom
[None,0,0, b,-b, 0, b+c*3, 0,0, a+b, 0,0], ## bottom
[None,0,0, b,-b, 0, b+c,-c,0, b+c*3, 0,0], ## bottom
[None,0,0, b,-b, 0, b, b,0, b+c,-c,0]] ## bottom
facet_panelss = translate([[None,0,0, a+b, 0,0, b, b,0, 0, b,a], ## slant N
[None,0,0, 0, b,a, a, 0,a, a+b, 0,0], ## slant N
[None,0,0, a+b, 0,0, a, 0,a, 0,-b,a], ## slant S
[None,0,0, 0,-b,a, b,-b,0, a+b, 0,0], ## slant S
# [None,0,0, a, 0,a, 0, b,a, -a, 0,a], ## top round
[None,0,0, 0,-b,a, a, 0,a, 0, b,a], ## top thin
# [None,0,0, -b, b,0, 0, b,a, b, b,0], ## side without hole
# [None,0,0, b, b,0, a+b, 0,0, b,-b,0], ## bottom end without peg
[None,0,0, -b, b,0, b, b,0, b,-b,0]] + ## bottom mid
facet_pegss + translate(rotate(flip(facet_pegss),(0,-90,-90)),(0,b,-b)),
(0,0,b + d))
facet_panelss += rotate(facet_panelss, ( 0,0,180))
facet_panelss += rotate(facet_panelss, (180,0,180))
facetss = facet_panelss[:] + rotate(facet_panelss, (90,90,0)) + rotate(facet_panelss, (90,0,90))
## 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([['N%s' % (xyz ) for xyz in list('xyz')] +
['%s%d' % (xyz, n) for n in range(3) for xyz in list('XYZ')] + ['RGB']] + facetss))
## Compile STL
outss = ([[('STL\n\n%-73s\n\n' % (header[:73])).encode('utf-8'), 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 = b''.join([bytes(out) for outs in outss for out in outs])
# out += ('\n\n## Python script to generate STL\n\n%s\n' % (open(__file__).read())).encode('utf-8')
print("# bytes:%d\t# facets:%d\ttitle:\"%-73s\"" % (len(out), len(facetss), header[:73]))
with open(__file__[:__file__.rfind('.')] + '.stl', 'wb') as f_out: f_out.write(out)
Ліцензування
Я, власник авторських прав на цей твір, добровільно публікую його на умовах такої ліцензії:



Цей файл ліцензований на умовах Creative Commons Із зазначенням автора - Розповсюдження на тих самих умовах 4.0 Міжнародна
- Ви можете вільно:
- ділитися – копіювати, поширювати і передавати твір
- модифікувати – переробляти твір
- При дотриманні таких умов:
- зазначення авторства – Ви повинні вказати авторство, надати посилання на ліцензію і вказати, чи якісь зміни було внесено до оригінального твору. Ви можете зробити це в будь-який розсудливий спосіб, але так, щоб він жодним чином не натякав на те, наче ліцензіар підтримує Вас чи Ваш спосіб використання твору.
- поширення на тих же умовах – Якщо ви змінюєте, перетворюєте або створюєте іншу похідну роботу на основі цього твору, ви можете поширювати отриманий у результаті твір тільки на умовах такої ж або сумісної ліцензії.
![]() |
Завантажувач файлу погодився на патентну ліцензію Фонду Вікімедіа щодо 3D: Цей файл та будь-які 3D-об'єкти, зображені у цьому файлі, є моєю роботою. Цим я надаю кожному користувачу, творцю чи розповсюджувачу об'єкта, зображеного у файлі, повсюдну, вільну від роялті, повністю оплачену, неексклюзивну, невідкличну і вічну ліцензію без додаткової оплати згідно з будь-яким патентом чи патентною заявкою, якою я володію зараз чи володітиму в майбутньому, створювати, перетворювати, використовувати, виставляти на продаж, продавати, імпортувати та розповсюджувати цей файл та будь-які 3D-об'єкти, зображені в ньому, що в протилежному разі могли б порушувати будь-які претензії до будь-яких патентів, якими я володію чи володітиму в майбутньому. Будь ласка, зауважте, що у випадку розбіжностей у значенні чи інтерпретації між оригінальною англомовною версією цієї ліцензії та перекладу оригінальна англомовна версія має перевагу. |
Підписи
Додайте однорядкове пояснення, що саме репрезентує цей файл
Об'єкти, показані на цьому файлі
зображує
Якесь значення без елемента на сайті Вікідані
2 квітня 2018
Історія файлу
Клацніть на дату/час, щоб переглянути, як тоді виглядав файл.
Дата/час | Мініатюра | Розмір об'єкта | Користувач | Коментар | |
---|---|---|---|---|---|
поточний | 18:34, 4 квітня 2018 | ![]() | 5120 × 2880 (14 КБ) | Cmglee | Add pegs to hold 3D-printed model together. |
16:08, 2 квітня 2018 | ![]() | 5120 × 2880 (5 КБ) | Cmglee | User created page with UploadWizard |
Використання файлу
Така сторінка використовує цей файл:
Глобальне використання файлу
Цей файл використовують такі інші вікі:
- Використання в en.wikipedia.org