ファイル:Jessen icosahedron.stl
ページのコンテンツが他言語でサポートされていません。
表示
この STL ファイルのこの PNG プレビューのサイズ: 800 × 600 ピクセル. その他の解像度: 320 × 240 ピクセル | 640 × 480 ピクセル | 1,024 × 768 ピクセル | 1,280 × 960 ピクセル | 2,560 × 1,920 ピクセル | 5,120 × 3,840 ピクセル。
元のファイル (5,120 × 2,880 ピクセル、ファイルサイズ: 1キロバイト、MIME タイプ: application/sla)
ウィキメディア・コモンズのファイルページにある説明を、以下に表示します。
|
View Jessen icosahedron.stl on viewstl.com
概要
解説Jessen icosahedron.stl | Jessen's icosahedron, made into a colour STL by CMG Lee. |
原典 | 投稿者自身による著作物 |
作者 | Cmglee |
Python source
#!/usr/bin/env python
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, colour=None): ## 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 + [facets[12] if colour is None else colour])
return facet_rotatess
def translate(facetss, ds, colour=None): ## 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)] +
[facets[12] if colour is None else colour] for facets in facetss]
def scale(facetss, ss, colour=None): ## ss = (sx,sy,sz)
return [facets[:3] + [facets[3 * i_point + i_xyz] * ss[i_xyz]
for i_point in range(1,4) for i_xyz in range(3)] +
[facets[12] if colour is None else colour] for facets in facetss]
def make_facetss(lotssss):
facetss = []
for facess in lotssss['faces']:
vertexs = facess['vertexs']
vertex_facetss = [[float(xyz) for xyz in lotssss['vertexs'][i_vertex]['xyz']]
for i_vertex in (vertexs[::-1] if (facess['flip']) else vertexs)]
facetss.append(flatten([(None,0,0)] + vertex_facetss + [[facess['colour']]]))
return facetss
def finish(facetss, header):
## 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)
corner_lotssss = {'vertexs': [{'xyz':(0,2,1)},
{'xyz':(2,1,0)},
{'xyz':(1,0,2)}],
'faces': [{'vertexs':[0,1,2], 'flip':True , 'colour':'#fff'}]}
side_lotssss = {'vertexs': [{'xyz':( 0,2,1)},
{'xyz':( 2,1,0)},
{'xyz':(-2,1,0)}],
'faces': [{'vertexs':[0,1,2], 'flip':True , 'colour':'#66f'}]}
corner_facetss = make_facetss(corner_lotssss)
corner_facetss += scale (corner_facetss, (-1,1,1), '#eee')
corner_facetss += scale (corner_facetss, (1,-1,1), '#ccc')
corner_facetss += scale (corner_facetss, (1,1,-1), '#999')
side_facetss = make_facetss(side_lotssss)
side_facetss += scale (side_facetss, (1,1,-1))
side_facetss += rotate (side_facetss, (0,90,90), '#f00') + \
rotate (side_facetss, (90,0,90), '#0c9')
side_facetss += scale (side_facetss, (-1,-1,-1))
finish(corner_facetss + side_facetss, "Jessen's icosahedron, made into a colour STL by CMG Lee.")
ライセンス
このファイルをアップロードした人はウィキメディア財団 3D 特許権条項を承諾しています。 このファイルならびにファイル中に描写した対象物はいずれも私の作品です。 ファイル中に描写した対象物の使用者、製造者、配布者に対し、このファイルならびにファイル中に描写した対象物の製造、製造委託、使用、販売受託、販売、輸入ならびに配布に関して私はここに全世界で著作権料無料の後払いのない非独占で不変の永続するライセンスを、私が現在所有する特許もしくは今後の特許申請による一切の追加料金を請求することなく付与するものとし、それにより私が現在所有するもしくは今後の申請による特許権のいかなる主張に反することはありません。 万一このライセンスの英語版原文と翻訳の間で意味や解釈に相違がある場合、英語原文を優先するものとします。 |
この作品の著作権者である私は、この作品を以下のライセンスで提供します。
このファイルはクリエイティブ・コモンズ 表示-継承 4.0 国際ライセンスのもとに利用を許諾されています。
- あなたは以下の条件に従う場合に限り、自由に
- 共有 – 本作品を複製、頒布、展示、実演できます。
- 再構成 – 二次的著作物を作成できます。
- あなたの従うべき条件は以下の通りです。
- 表示 – あなたは適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
- 継承 – もしあなたがこの作品をリミックスしたり、改変したり、加工した場合には、あなたはあなたの貢献部分を元の作品とこれと同一または互換性があるライセンスの下に頒布しなければなりません。
この文書は、フリーソフトウェア財団発行のGNUフリー文書利用許諾書 (GNU Free Documentation License) 1.2またはそれ以降のバージョンの規約に基づき、複製や再配布、改変が許可されます。不可変更部分、表紙、背表紙はありません。このライセンスの複製は、GNUフリー文書利用許諾書という章に含まれています。http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
あなたは上記のライセンスから、どれか一つ以上を選択できます。
このファイルに描写されている項目
題材
ウィキデータ項目がない値
ファイルの履歴
過去の版のファイルを表示するには、その版の日時をクリックしてください。
日付と時刻 | サムネイル | 寸法 | 利用者 | コメント | |
---|---|---|---|---|---|
現在の版 | 2022年2月6日 (日) 03:40 | 5,120 × 2,880 (1キロバイト) | Cmglee | Swap Y and Z axes to make thumbnail orientation similar to File:Translucent_Jessen_icosahedron.svg | |
2022年1月27日 (木) 01:07 | 5,120 × 2,880 (1キロバイト) | Cmglee | {{Information |Description=Jessen's icosahedron, made into a colour STL by CMG Lee. |Source={{own}} |Date= |Author= Cmglee |Permission= |other_versions= }} Category:STL files by cmglee Category:Jessen's icosahedron |
ファイルの使用状況
以下のページがこのファイルを使用しています:
グローバルなファイル使用状況
以下に挙げる他のウィキがこの画像を使っています:
- en-two.iwiki.icu での使用状況
- es.wikipedia.org での使用状況