使用python,我想在此基礎上圖片http://vixra.files.wordpress.com/2010/0繪製魔方...... S-cube.jpgDrawingPanel.py繪製一個魔方
這是我當前的代碼 http://pastebin.com/MfF07ze4
但我希望代碼至少有5個for循環和5個函數,這將有助於創建多維數據集。我還需要幫助算法爲魔方的1x1立方體創建3個點。
使用python,我想在此基礎上圖片http://vixra.files.wordpress.com/2010/0繪製魔方...... S-cube.jpgDrawingPanel.py繪製一個魔方
這是我當前的代碼 http://pastebin.com/MfF07ze4
但我希望代碼至少有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])
這是一個簡單等距3D到2D投影 - 它採用三維座標,並返回對應的2D屏幕座標。
proj = Projection((175,130), (50, -24), (-50, -24), ( 0, 70)).proj
我創建了一個特定的投影 - 基於您的圖像,我讓該角的立方體的原點在(175,130)。 + X運行到立方體的右上角,並使角點(3,0,0)易於細分立方體,這意味着(1,0,0)的屏幕投影是(使得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]座標喂到create_polygon列表。
# 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')
...然後可以通過交換軸類似地創建另外兩個面。
謝謝!雖然這比我能完全理解的複雜得多,但我仍然感謝你的幫助! – 2012-07-18 22:56:49
爲什麼不一次只顯示一張臉,並將顏色存儲在一個列表中,列表中有六個內部列表,每個列表中有9個項目用於正方形的顏色? – Zimm3r 2012-07-14 01:09:48
您的'此圖片'鏈接不起作用,請修復它! – 2012-07-14 01:17:34
...看起來應該是http://vixra.files.wordpress.com/2010/08/rubiks-cube.jpg – 2012-07-14 01:22:54