Ficheiro:Roche potential.stl

Fonte: testwiki
Saltar para a navegação Saltar para a pesquisa
Roche_potential.stl (tamanho: 270 kB, tipo MIME: application/sla)
Aviso: Este tipo de ficheiro pode conter código malicioso. Se o executar, o seu sistema pode ficar comprometido.

Este ficheiro vem da wiki na wiki Wikimedia Commons e pode ser usado por outros projetos. A descrição na página original de descrição do ficheiro é mostrada abaixo.

View Roche potential.stl  on viewstl.com

Descrição do ficheiro

Descrição
English: Roche potential of two orbiting bodies, rendered half as a filled surface and half as a open mesh by CMG Lee.
Data
Origem Obra do próprio
Autor Cmglee
Outras versões
STL desenvolvimento
InfoField
 Este(a) STL gráfico foi criado com o Python

Python source

#!/usr/bin/env python

header      = 'Roche potential of two orbiting bodies, half-filled-half-open by CMG Lee.'
z_scale     = -20
z_min       = -20
offset      = 0.1
i_xy_max    = 32
i_xy_scale  = 0.05

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 potential(x, y, z, q):
 try: return ((x - q / (1.0 + q)) ** 2 + 2 / ((1 + q) * (x ** 2 + y ** 2 + z ** 2) ** 0.5) +
              y ** 2 + 2 * q / ((1 + q) * ((x - 1) ** 2 + y ** 2 + z ** 2) ** 0.5))
 except ZeroDivisionError: return 9

## Compute elevation data
zss = [[potential(i_x * i_xy_scale, i_y * i_xy_scale, 0, 0.1) - 5
       for i_y in range(-i_xy_max, i_xy_max + 1)] for i_x in range(-i_xy_max, i_xy_max + 1)]

## Add facets
facetss = []
for  y in range(len(zss[0]) - 1):
 for x in range(len(zss   ) - 1):
  (x0, y0) = (x - i_xy_max, y - i_xy_max)
  (x1, y1) = (x0 + 1, y0 + 1)
  z00 = zss[x    ][y    ] * z_scale
  z01 = zss[x    ][y + 1] * z_scale
  z11 = zss[x + 1][y + 1] * z_scale
  z10 = zss[x + 1][y    ] * z_scale
  if (y0 >= 0):
   if (z01 >= z_min and z10 >= z_min and z11 >= z_min):
    facetss.append([None,0,0,  x0,y1,z01,  x1,y1,z11,  x1 - offset,y1 - offset,z11])
    facetss.append([None,0,0,  x1,y0,z10,  x1,y1,z11,  x1 - offset,y1 - offset,z11])
  elif (abs(z00 - z11) < abs(z01 - z10)):
   if (z11 >= z_min or z10 >= z_min or z00 >= z_min):
    facetss.append([None,0,0,  x1,y1,z11,  x0,y0,z00,  x1,y0,z10])
   if (z00 >= z_min or z01 >= z_min or z11 >= z_min):
    facetss.append([None,0,0,  x0,y0,z00,  x1,y1,z11,  x0,y1,z01])
  else:
   if (z10 >= z_min or z00 >= z_min or z01 >= z_min):
    facetss.append([None,0,0,  x1,y0,z10,  x0,y1,z01,  x0,y0,z00])
   if (z01 >= z_min or z11 >= z_min or z10 >= z_min):
    facetss.append([None,0,0,  x0,y1,z01,  x1,y0,z10,  x1,y1,z11])
  # sys.stdout.write(chr(int(math.ceil(zss[x][y] * 0.1)) + 32))
 # print('')
# facetss += [facets[0: 5] + [max(0, facets[ 5] - thickness)] +
#             facets[9:11] + [max(0, facets[11] - thickness)] +
#             facets[6: 8] + [max(0, facets[ 8] - thickness)] for facets in facetss]
facetss = rotate(facetss, (0, 0, 180))

## 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)

Licenciamento

Wikimedia Foundation
A pessoa que carregou este ficheiro concordou com as condições da licença de patentes 3D da Wikimedia Foundation: Tanto este ficheiro como todos os objetos 3D representados no ficheiro são de minha autoria. Pela presente, concedo a cada utilizador, fabricante, distribuidor ou revendedor do objeto representado no ficheiro, uma licença a nível mundial, sem pagamento de royalties, sem montantes devidos, não exclusiva, irrevogável e perpétua, sem qualquer custo adicional ao abrigo de patentes ou pedidos de patentes de que sou ou no futuro venha a ser proprietário, para fazer, mandar fazer, usar, colocar à venda, vender, importar, distribuir e revender este ficheiro e todos os objetos 3D representados no ficheiro que de outra forma infringiriam quaisquer alegações de quaisquer patentes de que sou ou venha a ser proprietário no futuro.

Note, por favor, que no caso de eventuais diferenças de significado ou interpretação entre a versão original desta licença em inglês e uma tradução, a versão original em inglês tem precedência.
Cmglee, titular dos direitos de autor desta obra, publica-a com as seguintes licenças:
w:pt:Creative Commons
atribuição partilha nos termos da mesma licença
A utilização deste ficheiro é regulada nos termos da licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Atribuição:
Pode:
  • partilhar – copiar, distribuir e transmitir a obra
  • recombinar – criar obras derivadas
De acordo com as seguintes condições:
  • atribuição – Tem de fazer a devida atribuição da autoria, fornecer uma hiperligação para a licença e indicar se foram feitas alterações. Pode fazê-lo de qualquer forma razoável, mas não de forma a sugerir que o licenciador o apoia ou subscreve o seu uso da obra.
  • partilha nos termos da mesma licença – Se remisturar, transformar ou ampliar o conteúdo, tem de distribuir as suas contribuições com a mesma licença ou uma licença compatível com a original.
GNU head É concedida permissão para copiar, distribuir e/ou modificar este documento nos termos da Licença de Documentação Livre GNU, versão 1.2 ou qualquer versão posterior publicada pela Free Software Foundation; sem Secções Invariantes, sem textos de Capa e sem textos de Contra-Capa. É incluída uma cópia da licença na secção intitulada GNU Free Documentation License.
Pode escolher a licença que quiser.

Legendas

Adicione uma explicação de uma linha do que este ficheiro representa

Elementos retratados neste ficheiro

retrata

application/sla

276 934 byte

2 880 pixel

5 120 pixel

5919123049c409a56304652c9dabb63b791d61db

Histórico do ficheiro

Clique uma data e hora para ver o ficheiro tal como ele se encontrava nessa altura.

Data e horaDimensõesUtilizadorComentário
atual03h26min de 14 de março de 2022 (270 kB)wikimediacommons>CmgleeFlip and rotate to match File:Lagrangian_points_equipotential.png

A seguinte página usa este ficheiro: