我假设您想要的是一种生成等边多边形坐标的方法,您可以将其提供给绘图程序。我不确定您正在使用哪个库,所以我将坚持使用值对列表:
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
里面发生了很多事情,所以我会讲一下。基本方法是扫出一个圆圈,然后将n
其上等间隔的点。这些将是多边形的点,从 12 点钟位置开始。
首先要做的是计算出每个楔形从中心向外的角度(以弧度为单位)。一个圆的弧度总数是 2 pi,所以我们的值为 2 pi /n
每段。
之后,一些基本的三角函数给了我们我们的观点(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]]
正如您所看到的,这些都是浮点数,因此您可能需要将它们压缩为整数才能使用它们。