在Python 3.2中绘制具有n个边的多边形

Goo*_*ose 9 python polygon turtle-graphics

我必须用Python编写一个程序来读取值n并在屏幕上绘制n个边的多边形.我可以使用turtle图形模块或graphics.py模块.

我知道如何在n =您输入的点数时绘制多边形,然后在屏幕上单击n次,但是我在如何将多个边转换为多边形时遇到了一些问题.

这是我有多个点的多边形代码:

def newPolygon(self,cmd):
    p = eval(input("how many points"))
    print("click",p,"times")
    num = []
    for i in range(p):
        vertices = self.win.getMouse()
        num.append(vertices)

    poly = Polygon(num)
    poly.setFill(self.color)
    poly.draw(self.win)

    self.figs.append(poly)
Run Code Online (Sandbox Code Playgroud)

这不是程序的整个代码(384行).这只是程序的一部分,其中绘制多边形函数是self.figs = []的位置,这是一个绘制的图形列表.

Jon*_*tts 8

我假设您想要的是一种生成等边多边形坐标的方法,您可以将其输入到绘图程序中.我不确定你使用的是哪个库,所以我要坚持使用一对值列表:

import math


def polygon(sides, radius=1, rotation=0, translation=None):
    one_segment = math.pi * 2 / sides

    points = [
        (math.sin(one_segment * i + rotation) * radius,
         math.cos(one_segment * i + rotation) * radius)
        for i in range(sides)]

    if translation:
        points = [[sum(pair) for pair in zip(point, translation)]
                  for point in points]

    return points
Run Code Online (Sandbox Code Playgroud)

那里有一点点,所以我会谈谈它.基本方法是扫出一个圆圈,并n在其上放置等间距的点.这些将是我们多边形的点,从12点钟位置开始.

首先要做的是从中心向外计算每个楔形的角度(以弧度表示).圆中的弧度总数为2 pi,因此我们的值为n每段2 pi .

之后,一些基本的触发给了我们我们的观点(https://en.wikipedia.org/wiki/Trigonometry#Extending_the_definitions).此时,我们按所需的半径进行缩放,并有机会将旋转偏移固定的量.

之后我们将值转换一定量,因为您可能希望多边形位于屏幕的中心,而不是角落.

几个例子

print polygon(5)    # A unit pentagon

# [(0.0, 1.0), (0.9510565162951535, 0.30901699437494745), (0.5877852522924732, -0.8090169943749473), (-0.587785252292473, -0.8090169943749476), (-0.9510565162951536, 0.30901699437494723)]

print polygon(4, 100) # A square, point up, 100 from the center to the points

# [(0.0, 100.0), (100.0, 6.123233995736766e-15), (1.2246467991473532e-14, -100.0), (-100.0, -1.8369701987210297e-14)]

print polygon(4, 2, math.pi / 4, [10, 10])  # A flat square centered on 10, 10

# [[11.414213562373096, 11.414213562373096], [11.414213562373096, 8.585786437626904], [8.585786437626904, 8.585786437626904], [8.585786437626904, 11.414213562373094]]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这些都是浮点数,因此您可能需要将它们压缩为整数才能使用它们.