這個文件來自維基共享資源

File:Octeract Petrie polygon.svg

维基百科,自由的百科全书
跳到导航 跳到搜索

原始文件(SVG文件,尺寸为2,100 × 2,100像素,文件大小:171 KB)


文件说明

说明
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: Hypercubestar.svg

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.

日期
来源 自己的作品
作者 Watchduck.svg Watchduck (a.k.a. Tilman Piesk)
其他版本

8-cube.svg

SVG 开发
Python-logo-notext.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)

授权协议

我,本作品著作权人,特此采用以下许可协议发表本作品:
GNU head 已授权您依据自由软件基金会发行的无固定段落及封面封底文字(Invariant Sections, Front-Cover Texts, and Back-Cover Texts)的GNU自由文件许可协议1.2版或任意后续版本的条款,复制、传播和/或修改本文件。该协议的副本请见“GNU Free Documentation License”。
w:zh:知识共享
署名
本文件采用知识共享署名 3.0 未本地化版本许可协议授权。
您可以自由地:
  • 共享 – 复制、发行并传播本作品
  • 修改 – 改编作品
惟须遵守下列条件:
  • 署名 – 您必须按照作者或许可人指定的方式对作品进行署名(但是不能以任何方式暗示他们同意您或您对作品的使用)。

您可以选择您需要的许可协议。

Quality images logo.svg
优质图像
本图像已依据优质图像方针评估,被视为优质图像

العربية | جازايرية | беларуская | беларуская (тарашкевіца)‎ | български | বাংলা | català | čeština | Cymraeg | Deutsch | Schweizer Hochdeutsch | Zazaki | Ελληνικά | English | Esperanto | español | eesti | euskara | فارسی | suomi | français | galego | עברית | हिन्दी | hrvatski | magyar | Հայերեն | italiano | 日本語 | ქართული | 한국어 | Kurdî | Lëtzebuergesch | lietuvių | македонски | മലയാളം | मराठी | Bahasa Melayu | Nederlands | polski | português | português do Brasil | rumantsch | română | русский | sicilianu | slovenčina | slovenščina | српски / srpski | svenska | தமிழ் | తెలుగు | ไทย | Türkçe | українська | vèneto | Tiếng Việt | 中文 | 中文(简体)‎ | 中文(繁體)‎ | ಕನ್ನಡ | ತುಳು | +/−

文件历史

单击某个日期/时间查看对应时刻的文件。

日期/时间缩略图大小用户备注
当前2016年6月22日 (三) 20:212016年6月22日 (三) 20:21的版本的缩略图2,100 × 2,100(171 KB)Watchduckpointlessly tiny change
2016年6月22日 (三) 19:072016年6月22日 (三) 19:07的版本的缩略图2,100 × 2,100(171 KB)Watchduckclean code, colors for equivalence classes
2009年10月2日 (五) 23:582009年10月2日 (五) 23:58的版本的缩略图1,375 × 1,375(1,022 KB)Watchduck
2009年10月2日 (五) 18:152009年10月2日 (五) 18:15的版本的缩略图1,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

以下页面使用本文件:

全域文件用途

以下其他wiki使用此文件:

元数据