阴阳神万物主 发表于 2019-8-27 18:10:58

关于零基础教学视频'Tkinter8'中的五角星

本帖最后由 阴阳神万物主 于 2021-9-29 09:00 编辑

恩姆,小甲鱼在这一讲中举的那个画五角星的例子感觉很累啊,全部的五个点都要自己算。而且呢,例子对于数学的利用不是很到位……
以下贴出我自己的代码:
from tkinter import *
import math as m

root = Tk()

w = Canvas(root, width=200, height=100)
w.pack()

thecenter = (100, 50)   #这个是圆心
R = 50

startA = m.pi/2         #找点的起始角度,小甲鱼例子里的顶点与圆心连线的倾斜角
pos = []                #储存点的列表

for i in range(5):      #这里在找点
    p = (thecenter - int(R * m.cos(startA+i*(2*m.pi/5))),\
         thecenter - int(R * m.sin(startA+i*(2*m.pi/5))))
    pos.append(p)

a = 4                   #a的值随意,是整数就行

points = []             #传给polygon构造函数的列表
for i in range(5):      #取点,range里是几,就取几个点(用while也行,直接就能得到完整的五角星,这里用for可以查看连线是怎么连的)
    points.extend(,pos])
    a += 2

w.create_polygon(points, outline='green', fill='yellow')

mainloop()

以下是具体数学原理:
**** Hidden Message *****

wwwrkf 发表于 2019-12-16 09:16:48

好看看

bravsheng 发表于 2021-9-18 16:21:42

本帖最后由 bravsheng 于 2021-9-18 16:24 编辑

厉害啊,方法真好!放入坐标系后一下子简单了!用for循环转一圈,正好得到每个顶点的坐标值
用extend添加每次得到的坐标值 (这个extend第一次看到它被用到,学习了!)
每次+2,一个隔一个,就能画出五角星。 但是要保证数字必须在列表里面。
楼主用的除5取余方法,真是巧妙!居然可以限定在0~4之间,这样确保在列表里面!

我一开始y方向的加减不太理解,后来查了资料才发现canvas中将y轴方向弄相反了! 怪不得y方向的加减都反了
但是x轴应该是正常的,我觉得x坐标那里应该用加号吧,虽然得到结果是一样的。
p = (thecenter + int(R * m.cos(startA+i*(2*m.pi/5))),\
         thecenter - int(R * m.sin(startA+i*(2*m.pi/5))))

chuyuanjie 发表于 2024-3-7 21:08:38

来看看,厉害了
页: [1]
查看完整版本: 关于零基础教学视频'Tkinter8'中的五角星