如何找到最初绘制的三角形的中点?我需要创建一个sierpinski三角形,其中一个三角形中有多个三角形。到目前为止,第一个三角形的代码如下所示:
import pygame
pygame.init()
colors = [pygame.Color(0, 0, 0, 255), # Black
pygame.Color(255, 0, 0, 255), # Red
pygame.Color(0, 255, 0, 255), # Green
pygame.Color(0, 0, 255, 255), # Blue
pygame.Color(255, 255, 255, 255)] # White
# Each of these constants is the index to the corresponding pygame Color object
# in the list, colors, defined above.
BLACK = 0
RED = 1
GREEN = 2
BLUE = 3
WHITE = -1
height = 640
width = 640
size = [width, height]
screen = pygame.display.set_mode(size)
screen.fill(WHITE)
def draw_triangle(p1, p2, p3, color, line_width, screen):
p1 = [5, height - 5]
p2 = [(width - 10) / 2, 5]
p3 = [width - 5, height - 5]
pygame.draw.polygon(screen, 0, [p1, p2, p3], 2)
pygame.display.flip()
def find_midpoint(p1, p2):
def sierpinski(degree, p1, p2, p3, color, line_width, screen):
其余两个函数都是完成sierpinski三角形所需的函数。首先,创建一个函数来查找中点,然后创建一个函数,在这些三角形中创建多个三角形,称为sierpinski三角形
我不确定
degree
参数的目的是什么,也许它是关于限制递归深度的下面是一个基于您的问题使用递归sierpinski函数的示例:
为了简洁起见,我删除了颜色处理,而是使用了pygame.color.Color,它接受构造函数的字符串参数。我还使用整数除法
//
代替round(…)
根据递归函数的深度或复杂度,可以重新绘制每一帧,但我想展示一个例子,以防函数复杂度增加。最后,我最近一直在玩调整屏幕大小的游戏,这似乎与一个单一的平局相配合,所以我也包括了这一点
编辑:我修改了
sierpinski
函数,以支持指定递归dep的degree
参数然后,我添加了一些事件处理,以便可以使用鼠标滚轮来增加和减少度,如标题栏所示:
另一个三角形内的“中点三角形”由一个三角形定义,该三角形的坐标是周围三角形边的中点:
因此,对于三角形的每条线/边,计算中点:
在您的情况下,将使用
p1
、p2
和p3
多次调用此函数以生成3个“角”三角形:然后,您需要将其封装在递归调用中,并提供某种深度救助
比如:
我认为这是一个Sierpiński triangle
注意:本文提供的代码不是经过测试和调试的代码,而是快速编写的帮助读者自己解决问题的代码
相关问题 更多 >
编程相关推荐