Dosiero:Octeract Petrie polygon.svg
Ĉi tiu dosiero estas de Vikimedia Komunejo kaj estas uzebla de aliaj projektoj. Jen la priskribo en ties dosier-priskriba paĝo.
Resumo
| PriskriboOcteract Petrie polygon.svg |
Petrie polygon graph of the 8-dimensional cube, the Hasse diagram of an 8 element set's power set Compare the Petrie polygon graph of the 4-dimensional cube: The colors represent the Walsh equivalence classes of 3-ary Boolean functions. Simpler Python code is shown in this file. It makes use of code created with the Python code below. |
||
| Fonto | Propra verko | ||
| Aŭtoro |
|
||
| Ceteraj versioj |
|
Altkvalita bildo العربية ∙ جازايرية ∙ беларуская ∙ беларуская (тарашкевіца) ∙ български ∙ বাংলা ∙ català ∙ čeština ∙ Cymraeg ∙ Deutsch ∙ Schweizer Hochdeutsch ∙ Zazaki ∙ Ελληνικά ∙ English ∙ Esperanto ∙ español ∙ eesti ∙ euskara ∙ فارسی ∙ suomi ∙ français ∙ galego ∙ עברית ∙ हिन्दी ∙ hrvatski ∙ magyar ∙ հայերեն ∙ Bahasa Indonesia ∙ italiano ∙ 日本語 ∙ Jawa ∙ ქართული ∙ Qaraqalpaqsha ∙ 한국어 ∙ kurdî ∙ кыргызча ∙ Latina ∙ Lëtzebuergesch ∙ lietuvių ∙ македонски ∙ മലയാളം ∙ मराठी ∙ Bahasa Melayu ∙ Nederlands ∙ ਪੰਜਾਬੀ ∙ Norfuk / Pitkern ∙ polski ∙ português ∙ português do Brasil ∙ rumantsch ∙ română ∙ русский ∙ sicilianu ∙ slovenčina ∙ slovenščina ∙ shqip ∙ српски / srpski ∙ svenska ∙ தமிழ் ∙ తెలుగు ∙ ไทย ∙ Tagalog ∙ toki pona ∙ Türkçe ∙ українська ∙ oʻzbekcha / ўзбекча ∙ vèneto ∙ Tiếng Việt ∙ 中文 ∙ 中文(简体) ∙ 中文(繁體) ∙ +/− |
Source code
| Python and SVG source |
|---|
from sympy import cos, pi
from math import log
from my.own.stuff import number_to_reverse_binary_list, hypercube_edges
import psycopg2
con = psycopg2.connect(host='lukulhuft', database='hupu', user='tupu', password='lupu')
cur = con.cursor()
bg_colors = ['fd0', 'e60000', 'bbb', '666', 'ffb4b4']
angle = pi / 16
a = cos(angle)
b = cos(3*angle)
c = cos(5*angle)
d = cos(7*angle)
directions = [
[-a, d], [-b, c], [-c, b], [-d, a], [d, a], [c, b], [b, c], [a, d]
] # directions of the 8 edges leaving the lowest vertex (as sympy objects)
big_factor = 1000 / (a + b + c + d) # diameter of the whole diagram shall be 2000
tiny_factor = 0.029 # the tiny dots in the vertices must be slightly off center
################################## vertices ##################################
sym_coordinates = [] # sympy objects
svg_coordinates = [] # rounded and converted to strings
svg_vertices = ''
svg_numbers = ''
for i in range(256):
cur.execute("""select wec from boolf3 where numval = %s""" % (i))
bg_color_index = cur.fetchone()[0] + 1 # from the DB comes a value between -1 and 3
bg_color = bg_colors[bg_color_index]
binary_vector = number_to_reverse_binary_list(i, 8)
x_sym = 0
y_sym = 0
for j in range(8):
if binary_vector[j]:
x_sym += directions[j][0]
y_sym += directions[j][1]
x_svg = str(round(big_factor * x_sym, 3))
y_svg = str(round(-big_factor * y_sym + 1000, 3))
sym_coordinates.append({'x': x_sym, 'y': y_sym})
svg_coordinates.append({'x': x_svg, 'y': y_svg})
svg_vertices += '<circle cx="%s" cy="%s" r="14.5" fill="#%s"/>' % (x_svg, y_svg, bg_color)
svg_numbers += '<text x="%s" y="%s">%s</text>' % (x_svg, y_svg, i)
################################## edges ##################################
svg_edges = ''
svg_tiny_dots = ''
edges = hypercube_edges(8)
for edge in edges: # ``edge`` is a pair of integers between 0 and 255
bottom = edge[0]
top = edge[1]
bottom_x_svg = svg_coordinates[bottom]['x']
bottom_y_svg = svg_coordinates[bottom]['y']
top_x_svg = svg_coordinates[top]['x']
top_y_svg = svg_coordinates[top]['y']
svg_edges += '<line x1="%s" y1="%s" x2="%s" y2="%s"/>' % (bottom_x_svg, bottom_y_svg, top_x_svg, top_y_svg)
edge_direction = directions[int(log(bottom ^ top, 2))]
tiny_edge_direction_x = tiny_factor * edge_direction[0]
tiny_edge_direction_y = tiny_factor * edge_direction[1]
bottom_x_sym = sym_coordinates[bottom]['x']
bottom_y_sym = sym_coordinates[bottom]['y']
top_x_sym = sym_coordinates[top]['x']
top_y_sym = sym_coordinates[top]['y']
bottom_tiny_x_sym = bottom_x_sym + tiny_edge_direction_x
bottom_tiny_y_sym = bottom_y_sym + tiny_edge_direction_y
top_tiny_x_sym = top_x_sym - tiny_edge_direction_x
top_tiny_y_sym = top_y_sym - tiny_edge_direction_y
bottom_tiny_x_svg = str(round(big_factor * bottom_tiny_x_sym, 3))
bottom_tiny_y_svg = str(round(-big_factor * bottom_tiny_y_sym + 1000, 3))
top_tiny_x_svg = str(round(big_factor * top_tiny_x_sym, 3))
top_tiny_y_svg = str(round(-big_factor * top_tiny_y_sym + 1000, 3))
svg_tiny_dots += '<circle cx="%s" cy="%s" r="1.8"/><circle cx="%s" cy="%s" r="1.8"/> ' % \
(bottom_tiny_x_svg, bottom_tiny_y_svg, top_tiny_x_svg, top_tiny_y_svg)
################################## file ##################################
svg_string = """<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="2100" height="2100" viewBox="-1050 -1050 2100 2100">
<!-- edges -->
<g style="stroke:#000; stroke-width:1.5; stroke-opacity:0.5;">
%s
</g>
<!-- vertices -->
<g style="stroke:#000; stroke-width:1.5px;">
%s
</g>
<!-- tiny dots -->
%s
<!-- numbers -->
<g style="text-anchor: middle; letter-spacing: -1;" font-size="10px" font-family="sans-serif" transform="translate(0, 3.7)" fill-opacity="0.5">
%s
</g>
</svg>
""" % (svg_edges, svg_vertices, svg_tiny_dots, svg_numbers)
svg_file = open('Octeract Petrie polygon.svg', 'w')
svg_file.write(svg_string)
|
Permesiloj:
| Estas permesite kopii, disdoni kaj/aŭ redakti ĉi tiun dokumenton, sen senŝanĝaj sekcioj, sen antaŭkovrilaj kaj sen dorskovrilaj tekstoj, laŭ la kondiĉoj de la Permesilo GNU por Liberaj Dokumentoj, Versio 1.2 aŭ ajna pli nova versio eldonita de la Free Software Foundation; sen Senŝanĝaj Sekcioj, Antaŭovrilaj Tekstoj aŭ Malantaŭkovrilaj Tekstoj. Kopio de la permesilo estas inkluzivita en la sekcio titolita GNU Free Documentation License.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
- Vi rajtas:
- kunhavigi – kopii, distribui kaj publikigi la verkon
- aliigi – modifi, adapti, kompletigi, transformi, uzi la tutan verkon aŭ ties partojn, memstare aŭ en aliaj verkoj
- La verko rajtas esti kunhavigata nur:
- atribuite – Vi devas atribui aŭtorecon, liveri ligilon al la permesilo kaj marki ĉu ŝanĝoj estis faritaj. Faru tion en aprobinda maniero, tamen ne sugestante, ke permesinto aprobas vin aŭ vian uzon.
Titoloj
Eroj prezentitaj en ĉi tiu dosiero
montras
image/svg+xml
Dosiera historio
Klaku daton/tempon por vidi la dosieron kia ĝi aspektis tiam.
| Dato/tempo | Bildeto | Dimensioj | Uzanto | Komento | |
|---|---|---|---|---|---|
| nuna | 22:21, 22 jun. 2016 | 2 100 × 2 100 (171 KB) | wikimediacommons>Watchduck | pointlessly tiny change |
Dosiera uzado
La jena paĝo ligas al ĉi tiu dosiero:
