Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小康2022
Magic_Cube
提交
2d60d163
Magic_Cube
项目概览
小康2022
/
Magic_Cube
通知
6
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Magic_Cube
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
2d60d163
编写于
2月 09, 2023
作者:
小康2022
👍
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
version 0.3
上级
96ff1f63
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
52 addition
and
11 deletion
+52
-11
MagicCube.png
MagicCube.png
+0
-0
cube.py
cube.py
+19
-9
main.py
main.py
+33
-2
未找到文件。
MagicCube.png
0 → 100644
浏览文件 @
2d60d163
99.0 KB
cube.py
浏览文件 @
2d60d163
from
math
import
atan
,
cos
,
hypot
,
pi
,
sin
from
math
import
atan
,
cos
,
hypot
,
pi
,
sin
,
sqrt
import
numpy
as
np
def
arctan
(
n1
:
float
,
n2
:
float
)
->
float
:
...
...
@@ -45,13 +46,22 @@ class Point:
self
.
γ
=
arctan
(
self
.
y
,
self
.
x
)
self
.
dis
=
hypot
(
self
.
x
,
self
.
y
,
self
.
z
)
else
:
self
.
x
=
self
.
dis
*
sin
(
self
.
β
)
*
cos
(
self
.
γ
)
self
.
y
=
self
.
dis
*
sin
(
self
.
γ
)
*
cos
(
self
.
α
)
self
.
z
=
self
.
dis
*
sin
(
self
.
α
)
*
cos
(
self
.
β
)
k
=
(
self
.
dis
/
hypot
(
self
.
x
,
self
.
y
,
self
.
z
))
self
.
x
*=
k
self
.
y
*=
k
self
.
z
*=
k
self
.
x
=
self
.
dis
*
sqrt
(
1
/
(
1
/
cos
(
self
.
γ
)
**
2
+
1
/
sin
(
self
.
β
)
**
2
-
1
))
self
.
y
=
self
.
dis
*
sqrt
(
1
/
(
1
/
cos
(
self
.
α
)
**
2
+
1
/
sin
(
self
.
γ
)
**
2
-
1
))
self
.
z
=
self
.
dis
*
sqrt
(
1
/
(
1
/
cos
(
self
.
β
)
**
2
+
1
/
sin
(
self
.
α
)
**
2
-
1
))
if
cos
(
self
.
γ
)
<
0
or
sin
(
self
.
β
)
<
0
:
self
.
x
=
-
self
.
x
if
cos
(
self
.
α
)
<
0
or
sin
(
self
.
γ
)
<
0
:
self
.
y
=
-
self
.
y
if
cos
(
self
.
β
)
<
0
or
sin
(
self
.
α
)
<
0
:
self
.
z
=
-
self
.
z
# self.x = self.dis * sin(self.β) * cos(self.γ)
# self.y = self.dis * sin(self.γ) * cos(self.α)
# self.z = self.dis * sin(self.α) * cos(self.β)
# k = (self.dis / hypot(self.x, self.y, self.z))
# self.x *= k
# self.y *= k
# self.z *= k
def
project
(
self
,
dis
:
float
)
->
tuple
[
float
,
float
]:
""" 返回二维坐标 """
...
...
@@ -69,7 +79,7 @@ class Cube:
""" 正方体 """
def
__init__
(
self
,
x
:
float
,
y
:
float
,
z
:
float
,
r
:
float
)
->
None
:
k
=
-
r
,
r
k
=
r
,
-
r
self
.
points
=
[
Point
(
x
+
a
,
y
+
b
,
z
+
c
)
for
a
in
k
for
b
in
k
for
c
in
k
]
def
translate
(
self
,
dx
:
float
,
dy
:
float
,
dz
:
float
)
->
None
:
...
...
main.py
浏览文件 @
2d60d163
import
tkintertools
as
tkt
from
cube
import
Cube
__version__
=
'0.
2
'
__version__
=
'0.
3
'
__author__
=
'小康2022'
__update__
=
'2023/02/09'
COLOR
=
'red'
,
'yellow'
,
'blue'
,
'green'
,
'orange'
,
'purple'
class
Block
(
Cube
):
""" 方块 """
def
__init__
(
self
,
x
:
float
,
y
:
float
,
z
:
float
,
r
:
float
)
->
None
:
def
__init__
(
self
,
x
:
float
,
y
:
float
,
z
:
float
,
r
:
float
,
canvas
:
tkt
.
Canvas
)
->
None
:
Cube
.
__init__
(
self
,
x
,
y
,
z
,
r
)
self
.
canvas
=
canvas
p
=
[(
p
[
0
]
+
350
,
p
[
1
]
+
350
)
for
p
in
self
.
project
(
300
)]
self
.
oval
=
[
canvas
.
create_polygon
(
*
p
[
4
],
*
p
[
5
],
*
p
[
7
],
*
p
[
6
],
fill
=
COLOR
[
0
]),
canvas
.
create_polygon
(
*
p
[
2
],
*
p
[
3
],
*
p
[
7
],
*
p
[
6
],
fill
=
COLOR
[
1
]),
canvas
.
create_polygon
(
*
p
[
1
],
*
p
[
3
],
*
p
[
7
],
*
p
[
5
],
fill
=
COLOR
[
2
]),
canvas
.
create_polygon
(
*
p
[
0
],
*
p
[
1
],
*
p
[
5
],
*
p
[
4
],
fill
=
COLOR
[
3
]),
canvas
.
create_polygon
(
*
p
[
0
],
*
p
[
4
],
*
p
[
6
],
*
p
[
2
],
fill
=
COLOR
[
4
]),
canvas
.
create_polygon
(
*
p
[
0
],
*
p
[
1
],
*
p
[
3
],
*
p
[
2
],
fill
=
COLOR
[
5
])
]
def
update
(
self
)
->
None
:
""" 更新图像 """
p
=
[(
p
[
0
]
+
350
,
p
[
1
]
+
350
)
for
p
in
self
.
project
(
300
)]
# self.canvas.coords(self.oval[0], *p[4], *p[5], *p[7], *p[6]) # 背面
# self.canvas.coords(self.oval[1], *p[2], *p[3], *p[7], *p[6]) # 左侧
# self.canvas.coords(self.oval[2], *p[1], *p[3], *p[7], *p[5]) # 下面
# self.canvas.coords(self.oval[3], *p[0], *p[1], *p[5], *p[4]) # 右侧
# self.canvas.coords(self.oval[4], *p[0], *p[4], *p[6], *p[2]) # 上面
self
.
canvas
.
coords
(
self
.
oval
[
5
],
*
p
[
0
],
*
p
[
1
],
*
p
[
3
],
*
p
[
2
])
# 正面
class
Window
:
...
...
@@ -21,7 +43,16 @@ class Window:
canvas
.
place
(
x
=
0
,
y
=
0
)
def
__init__
(
self
)
->
None
:
self
.
b
=
Block
(
0
,
0
,
0
,
100
,
self
.
canvas
)
self
.
timer
()
self
.
root
.
mainloop
()
def
timer
(
self
,
ind
:
int
=
0
)
->
None
:
""" 计时器 """
self
.
b
.
rotate
(
0.01
,
0
,
0
)
# self.b.translate(0, 0.1, 0)
self
.
b
.
update
()
self
.
root
.
after
(
30
,
self
.
timer
,
ind
+
1
)
Window
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录