发霉的被子长小红点,发霉的被子洗不干净还能用吗

这个不是我画的

画镜像图,是上编程课时,孩子们较量 喜欢的一个案例,虽然数学公式可能不懂,但法式的设计意图,明确 起来没什么难题 ,一句“万花筒”,就什么都解决了。。

焦点代码,就是凭证 原始坐标点,沿屏幕中央 ,旋转 n-1 次,获取 n-1 个镜像点。

def add_point(point): '''添加当前点,并盘算所有镜像点,添加到 m_lines 里''' if points ==[] or point != points[-1]: # 加一个判断,阻止 加入重复的点,铺张 空间 points.append(point) for i in range(1,n): # 盘算所有镜像点坐标 mp = get_mirror_point(point,m_angle * i) # 第 i 个镜像点 m_lines[i][-1].append(mp)def get_mirror_point(p,angle): '''盘算 p 点 沿屏幕中央 (cx,cy)旋转 angle 后的坐标值''' cx,cy = W/2, H/2 # 以屏幕中央 点为坐标原点 angle = math.radians(angle) # 角度转化为弧度 x,y = p[0] - cx, cy - p[1] # 用到旋转公式 mx = round( x * math.cos(angle) - y * math.sin(angle)) my = round( x * math.sin(angle) + y * math.cos(angle)) nx = mx + cx ny = cy - my return nx,ny

上面代码用到了三角函数,着实 用向量来盘算的话,会更简朴一些。

没时间诠释 了,下面贴出完整代码(mirror.py):

import pygamefrom pygame.locals import *import os,random,sys,mathimport time# 常量 W , H = 1280,800 n = 5 # 镜像次数GREEN = (0,255,0)# 初始化游戏窗口pygame.init()# screen = pygame.display.set_mode((0,0),FULLSCREEN)screen = pygame.display.set_mode((W,H))W,H = screen.get_size()pygame.display.set_caption("极坐标")# 全局变量lines = [] # 用户画的原始线段points = [] # 当前画的线段的点荟萃(从鼠标落下到鼠标抬起,鼠标经由 的所有坐标点)'''m_lines 是个三维数组,分三个条理:第一层:所有线段荟萃,用户线段荟萃 + (n-1)个镜像线段荟萃第二层:一个用户线段荟萃里,包罗多个脱离 的线段,每次落笔抬笔之间,即组成一个线段第三层:每个线段,包罗的点的荟萃'''m_lines = [] # 镜像线段 mirror lines,由用户绘制线段,天生 的所有镜像线段,包罗了用户线段colors = []def init(): '''初始化''' global lines,points,m_angle m_angle = 360 / n # 镜像单元角度 m_lines.clear() # 清空 for i in range(n): m_lines.append([[]]) # 凭证 镜像数目 ,先分配好空间 colors.append(random_rainbow_color()) # 随机颜色 lines = m_lines[0] # 线段 points = lines[0] # 点def random_rainbow_color(): '''随机天生 饱和度最大的颜色''' h = random.randint(0,360) color = pygame.Color((0,0,0)) color.hsla = (h,100,50,100) return colordef get_mirror_point(p,angle): '''盘算 p 点 沿屏幕中央 (cx,cy)旋转 angle 后的坐标值''' cx,cy = W/2, H/2 # 以屏幕中央 点为坐标原点 angle = math.radians(angle) # 角度转化为弧度 x,y = p[0] - cx, cy - p[1] # 用到旋转公式 mx = round( x * math.cos(angle) - y * math.sin(angle)) my = round( x * math.sin(angle) + y * math.cos(angle)) nx = mx + cx ny = cy - my # print(p,(x,y),(mx,my),(nx,ny)) return nx,nydef new_line(): '''分配新的线段空间''' global points lines.append([]) points = lines[-1] for i in range(1,n): m_lines[i].append([])def add_point(point): '''添加当前点,并盘算所有镜像点,添加到 m_lines 里''' if points ==[] or point != points[-1]: # 加一个判断,阻止 加入重复的点,铺张 空间 points.append(point) for i in range(1,n): # 盘算所有镜像点坐标 mp = get_mirror_point(point,m_angle * i) # 第 i 个镜像点 m_lines[i][-1].append(mp)def save_image(): '''生涯 图片''' filename = 'mirror-'+ time.strftime("%Y%m%d%H%M%S", time.localtime()) +'.png' pygame.image.save(screen,filename)init()drawing = Falserunning = Trueclock = pygame.time.Clock()while running: # 事务 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() if event.key == K_SPACE: # 按空格键清屏 init() if event.key == K_s: key_pressed = pygame.key.get_pressed() if key_pressed[K_LCTRL] or key_pressed[K_RCTRL]: # CTRL + s 组合键,生涯 图片 save_image() if event.type == MOUSEBUTTONDOWN: # 按下鼠标 drawing = True # 最先 画线 if event.type == MOUSEBUTTONUP: # 铺开 鼠标 drawing = False # 画线竣事 new_line() #分配新的线段空间 if event.type == MOUSEMOTION: # 移动鼠标 if drawing: point = pygame.mouse.get_pos() add_point(point) # 添加当前坐标点和对应的镜像点 screen.fill(0) # 填充配景 # 最先 绘图 for i,m_line in enumerate(m_lines): for line in m_line: if len(line) 1: pygame.draw.lines(screen,colors[i],False,line,2) # colors[i] # 竣事 绘图 pygame.display.update() clock.tick(30)

空格:清屏

CTRL + S : 生涯 图片

这个是我画的

最新版权声明:鹊肤霖提醒您:在浏览本本网站(gta5人物身上全是红点)侠盗猎车追越野车任务?信息时,请您务必阅读并理解本声明。本网站部分内容来源于网络,如您认为本网不应该展示与您有关的信息,请及时与我们取得联系,我们会尊重您的决定并当天作出处理。作者:鹊肤霖 转载请注明转载地址

专业祛鸡皮肤 微信 : zyjs28 (长按可以复制)

专注:鸡皮肤、鱼鳞皮肤、蛇鳞皮肤、红点瘙痒