Python DrawingPanel.py绘制一个rubik';s立方体

Python DrawingPanel.py绘制一个rubik';s立方体,python,rubiks-cube,Python,Rubiks Cube,我想用python根据这张图片画一个魔方。。。s-cube.jpg 这是我当前的代码 但是我希望代码中至少有5个for循环和5个函数,这将有助于创建多维数据集。此外,我还需要有关为魔方的1x1立方体创建3个点的算法的帮助 我没有drawingpanel模块,因此这是未经测试的: from drawingpanel import * panel = DrawingPanel(600, 600) from math import * import numpy as np class Projec

我想用python根据这张图片画一个魔方。。。s-cube.jpg

这是我当前的代码


但是我希望代码中至少有5个for循环和5个函数,这将有助于创建多维数据集。此外,我还需要有关为魔方的1x1立方体创建3个点的算法的帮助

我没有
drawingpanel
模块,因此这是未经测试的:

from drawingpanel import *
panel = DrawingPanel(600, 600)
from math import *
import numpy as np

class Projection(object):
    def __init__(self, origin, dx, dy, dz):
        self.o = np.matrix([origin[0], origin[1], 0.])
        self.p = np.matrix([
                    [dx[0], dx[1], 0.],
                    [dy[0], dy[1], 0.],
                    [dz[0], dz[1], 0.]
                ])

    def proj(self, x, y, z):
        res = self.o + np.matrix([x, y, z]) * self.p
        return (res[0,0], res[0,1])
这是一个简单的等轴测三维到二维投影-它获取三维坐标并返回相应的二维屏幕坐标

proj = Projection((175,130), ( 50, -24), (-50, -24), (  0,  70)).proj
我创建了一个特定的投影-基于您的图像,我将立方体的前角作为原点(175130)+X运行到立方体的右上角,我将该角点(3,0,0)设置为便于细分立方体,这意味着(1,0,0)的屏幕投影为(215106),使dx(50,-24);然后将+Y和+Z分别对应于左上角和前下角

def make_poly_pts(*args):
    return [coord for pt in args for coord in proj(*pt)]
这是一个实用函数-它获取一个3d点列表,并返回一个[x1,y1,x2,y2,…xN,yN]坐标列表,以创建_多边形

# allow for a gap between stickers
offs = 0.05
ooffs = 1. - offs

# draw top face (XY)
panel.canvas.create_polygon(*make_poly_pts((0,0,0), (3,0,0), (3,3,0), (0,3,0)), outline='black', fill='black')
for i in xrange(3):
    for j in xrange(3):
        panel.canvas.create_polygon(*make_poly_pts((i+offs,j+offs,0), (i+ooffs,j+offs,0), (i+ooffs,j+ooffs,0), (i+offs,j+ooffs,0)), outline='black', fill='yellow')

。。。然后,通过交换轴,可以类似地创建其他两个面。

为什么不一次只显示一个面,并将颜色存储在一个列表中,该列表包含六个内部列表,每个列表中有九项用于正方形的颜色?您的“此图片”链接不起作用,请修复它!。。。看起来应该是谢谢你!虽然这比我能完全理解的要复杂得多,但我仍然感谢您的帮助!