# File:Octeract Petrie polygon.svg

## 文件说明

Matrix showing the same elements and some of the symmetry

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.

SVG 开发
 本矢量图使用Python创作。

## Python

```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_sym, y_sym))
svg_coordinates.append((x_svg, 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, bottom_y_svg) = svg_coordinates[bottom]
(top_x_svg, top_y_svg) = svg_coordinates[top]

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, bottom_y_sym) = sym_coordinates[bottom]
(top_x_sym, top_y_sym) = sym_coordinates[top]

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.3;">
%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)
```

## 授权协议

 已授权您依据自由软件基金会发行的无固定段落及封面封底文字（Invariant Sections, Front-Cover Texts, and Back-Cover Texts）的GNU自由文件许可协议1.2版或任意后续版本的条款，复制、传播和／或修改本文件。该协议的副本请见“GNU Free Documentation License”。
 本文件采用知识共享署名 3.0 未本地化版本许可协议授权。 您可以自由地： 共享 – 复制、发行并传播本作品 修改 – 改编作品 惟须遵守下列条件： 署名 – 您必须按照作者或许可人指定的方式对作品进行署名（但是不能以任何方式暗示他们同意您或您对作品的使用）。您必须指出正确的原作者，和提供授权条款的链接，并指出是否对内容进行了更改。 您可以以任何合理的方式来做，但不得以任何方式表明许可人认可您或您的使用。

 优质图像 本图像已依据优质图像方针评估，被视为优质图像。

## 文件历史

2016年6月22日 (三) 19:072,100 × 2,100（171 KB）Watchduckclean code, colors for equivalence classes
2009年10月2日 (五) 23:581,375 × 1,375（1,022 KB）Watchduck
2009年10月2日 (五) 18:151,488 × 1,488（1,022 KB）Watchduck{{Information |Description={{en|1=Symmetrical central graph of the 8 dimensional cube (Octeract) and Hasse diagram of an 8 element sets power set. (Compare: [[:Image:Hypercubestar.svg|Central gr

## 全域文件用途

• be.wikipedia.org上的用途
• cv.wikipedia.org上的用途
• en.wikipedia.org上的用途
• en.wikiversity.org上的用途
• eo.wikipedia.org上的用途
• es.wikipedia.org上的用途
• it.wikipedia.org上的用途
• pl.wikipedia.org上的用途
• ru.wikipedia.org上的用途
• sl.wikipedia.org上的用途
• uk.wikipedia.org上的用途