Python 3.x 用一个顶点的中心点、半径和坐标绘制n边正多边形

Python 3.x 用一个顶点的中心点、半径和坐标绘制n边正多边形,python-3.x,tkinter,Python 3.x,Tkinter,不确定这是否应该作为编程问题或数学问题发布,但我需要绘制一个n边正多边形,提供一条边的中心、半径和端点坐标 这是我到目前为止的代码,但它只能绘制多边形最右边的垂直边: from tkinter import * import math class App: def __init__(self, master): self.w = Canvas(width=800, height=600, bg='black') self.w.draw_regular_p

不确定这是否应该作为编程问题或数学问题发布,但我需要绘制一个n边正多边形,提供一条边的中心、半径和端点坐标

这是我到目前为止的代码,但它只能绘制多边形最右边的垂直边:

from tkinter import *
import math

class App:
    def __init__(self, master):
        self.w = Canvas(width=800, height=600, bg='black')
        self.w.draw_regular_polygon((400,400), 100, 3, outline='green')
        self.w.grid(row=0, column=0)
    def _draw_regular_polygon(self, center, radius, n, **kwargs):
        coord_list = []
        for i in range(n):
            coord_x = center[0] + radius * math.cos((math.pi/n) * (1 + 2 * i))
            coord_y = center[1] + radius * math.sin((math.pi/n) * (1 + 2 * i))
            coord_list.append(coord_x)
            coord_list.append(coord_y)
        return self.create_polygon(coord_list, **kwargs)
    Canvas.draw_regular_polygon = _draw_regular_polygon
root = Tk()
app = App(root)
root.mainloop()
我需要能够提供垂直线的端点,或者能够旋转多边形,使每个点在指定的方向上定向


我这个项目的最终目标是绘制一个由n边正多边形组成的晶格。我之所以使用tkinter,是因为它是我最熟悉的软件包,但如果有一个软件包可以更好地处理它,我愿意学习另一个,但没有一个软件包可以为我绘制网格。我希望能够理解晶格的组成,而不仅仅是为我绘制它。

为函数添加额外的旋转角度;将该常量值添加到围绕创建坐标列表的圆的旋转中

我稍微重新排列了您的坐标系,并添加了一个固定值,因此底线始终以
0
的角度笔直绘制。要旋转到两点之间的下半个间隔,请添加
math.pi/n
作为角度

from tkinter import *
import math

class App:
    def __init__(self, master):
        self.w = Canvas(width=800, height=600, bg='black')
        self.w.draw_regular_polygon((400,400), 100, 5, 0, outline='green')
        self.w.draw_regular_polygon((400,400), 100, 5, math.pi/5, outline='red')
        self.w.grid(row=0, column=0)
    def _draw_regular_polygon(self, center, radius, n, angle, **kwargs):
        angle -= (math.pi/n)
        coord_list = [[center[0] + radius * math.sin((2*math.pi/n) * i - angle),
            center[1] + radius * math.cos((2*math.pi/n) * i - angle)] for i in range(n)]
        return self.create_polygon(coord_list, **kwargs)
    Canvas.draw_regular_polygon = _draw_regular_polygon
root = Tk()
app = App(root)
root.mainloop()
结果:

(这就是说:唯一重复的n边多边形晶格是用于
n=[3,4,6]
,其中唯一有问题的是
3
,您可以对其进行硬编码。)