【教学类-58-02】黑白三角拼图02(3*3宫格)262144种

2024-05-25 02:44

本文主要是介绍【教学类-58-02】黑白三角拼图02(3*3宫格)262144种,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景需求:

已知黑白三角拼图2*2(4个拼图)一共有256种排列方法

【教学类-58-01】黑白三角拼图01(2*2宫格)256种-CSDN博客文章浏览阅读142次,点赞5次,收藏12次。【教学类-58-01】黑白三角拼图01(2*2宫格)256种https://blog.csdn.net/reasonsummer/article/details/139173885?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139173885%22%2C%22source%22%3A%22reasonsummer%22%7D

接下去做黑白三角拼图3*3(9个拼图)一共有有262144种排列方法(26万),

为了生成快一点,图片大小是170*170,1.46KB,很小很小。

因为26万张太多了,所以不制作PDF了,如果需要做PDF,建议还是改成300*300

代码展示

'''
黑白三角(3*3), 9个单元格每个有四个坐标,四个坐标随机抽取3个,进行组合,共有#262144种不重复排序,带边距
因为有26万种,所以把图片做的150像素小一点  生成时间15:34-16:02
AI对话大师,阿夏
2024年5月24日'''from PIL import Image, ImageDrawb=180
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\黑白三角'# 创建bxb的画布
canvas = Image.new('RGB', (b,b), (255, 255, 255))
draw = ImageDraw.Draw(canvas)# 定义表格的行数和列数
rows = 3
cols = 3
margin = 10# 计算单元格的宽度和高度
cell_width = (b - 2 * margin) // cols
cell_height = (b - 2 * margin) // rows# 绘制表格的竖直线
for i in range(cols + 1):x = margin + i * cell_widthdraw.line([(x, margin), (x, b - margin)], fill=(0, 0, 0), width=2)# 绘制表格的水平线
for i in range(rows + 1):y = margin + i * cell_heightdraw.line([(margin, y), (b - margin, y)], fill=(0, 0, 0), width=2)# 保存画布
mb = '3格模板.png'
canvas.save(path + fr'\{mb}')print('---2、计算三个坐标点的黑色三角形不重复图案有几个-------')# 创建一个空列表用于存储单元格的坐标
cell_coordinates = []# 计算每个单元格的四个顶点坐标
for row in range(rows):for col in range(cols):top_left = (margin + col * cell_width, margin + row * cell_height)top_right = (margin + (col + 1) * cell_width, margin + row * cell_height)bottom_left = (margin + col * cell_width, margin + (row + 1) * cell_height)bottom_right = (margin + (col + 1) * cell_width, margin + (row + 1) * cell_height)# 将四个顶点坐标添加到列表中cell_coordinates.append([top_left, top_right, bottom_left, bottom_right])
# print(cell_coordinates)
# [[(0, 0), (400, 0), (0, 400), (400, 400)], [(400, 0), (b, 0), (400, 400), (b, 400)], [(0, 400), (400, 400), (0, b), (400, b)], [(400, 400), (b, 400), (400, b), (b, b)]]import itertools,os# 生成所有组合方式
combinations = list(itertools.product(*[itertools.combinations(sublist, 3) for sublist in cell_coordinates]))
# print(combinations)
print(len(combinations))
# 262144print('---3、制作三个坐标点的黑色三角形(4个)-------')
from PIL import Image, ImageDrawnew=path+r'\三宫格组合图片'
os.makedirs(new,exist_ok=True)m=1
# 定义要绘制的坐标点组合
for point_combination in combinations:# 读取图像文件image = Image.open(path+fr'\{mb}')# 创建绘图对象draw = ImageDraw.Draw(image)# 遍历每个坐标点组合for combination in point_combination:# 绘制填充为黑色的多边形draw.polygon(combination, fill="black")# 保存结果图像image.save(new+fr"\{m:06d}.png")m+=1# print('---4合并打印-26万张就不生成卡片了------')# # 第3步,读取图片写入docx,合并PDF# import os,time
# from docx import Document
# from reportlab.lib.pagesizes import letter
# from reportlab.pdfgen import canvas
# from PyPDF2 import PdfMerger
# from docx.shared import Cm# # 读取123文件夹中的所有图片地址
# image_folder = new
# new_folder = path+r'\零时文件夹'
# os.makedirs(new_folder, exist_ok=True)
# image_files = [os.path.join(image_folder, file) for file in os.listdir(image_folder) if file.endswith('.png')]# # 每8个图片一组进行处理
# grouped_files = [image_files[i:i+6] for i in range(0, len(image_files), 6)]
# print(grouped_files)# # 处理每一组图片
# for group_index, group in enumerate(grouped_files):
#     # 创建新的Word文档
#     doc = Document(path+r'\模板6格.docx')
#     print(group)#     # 遍历每个单元格,并插入图片
#     for cell_index, image_file in enumerate(group):
#         # 计算图片长宽(单位:厘米)#         # 插入图片到单元格
#         table = doc.tables[0]
#         cell = table.cell(int(cell_index / 2), cell_index % 2)
#         # 6列两个都是6
#         cell_paragraph = cell.paragraphs[0]
#         cell_paragraph.clear()
#         run = cell_paragraph.add_run()
#         run.add_picture(image_file, width=Cm(9.4), height=Cm(9.4))#     # 保存Word文档
#     doc.save(os.path.join(new_folder, f'{group_index + 1}.docx'))# # 所有docx合并成PDF# # 将10个docx转为PDF
# import os
# from docx2pdf import convert
# from PyPDF2 import PdfFileMerger
# # from PyPDF4 import PdfMerger# # output_folder = output_folder
# pdf_output_path = path+fr'\黑白三角三宫格26万(6张一页).pdf'# # 将所有DOCX文件转换为PDF
# for docx_file in os.listdir(new_folder):
#     if docx_file.endswith('.docx'):
#         docx_path = os.path.join(new_folder, docx_file)
#         convert(docx_path, docx_path.replace('.docx', '.pdf'))# # 合并零时文件里所有PDF文件
# merger = PdfFileMerger()
# for pdf_file in os.listdir(new_folder):
#     if pdf_file.endswith('.pdf'):
#         pdf_path = os.path.join(new_folder, pdf_file)
#         merger.append(pdf_path)
# time.sleep(2)# # 保存合并后的PDF文件
# merger.write(pdf_output_path)
# merger.close()# import shutil
# # 删除输出文件夹# shutil.rmtree(new_folder)

因为有26万种,所以把图片做的150像素小一点  生成时间15:34-16:02,大约是36分钟才生成完成

22万张根本不可能打印,平时幼儿玩最多20张参考图。

所以我也随机抽取10张不同付的3*3图片样例。

'''
黑白三角(3*3), 9个单元格每个有4个坐标,四个坐标随机抽取3个,进行组合,自动抽取10张,带边距
随机图片
AI对话大师,阿夏
2024年5月24日'''from PIL import Image, ImageDraw
f=10 # 需要10份
b=800 # 画布大小
g=3 # 宫格数
by=50 # 边距path = r'C:\Users\jg2yXRZ\OneDrive\桌面\黑白三角'# 创建bxb的画布
canvas = Image.new('RGB', (b,b), (255, 255, 255))
draw = ImageDraw.Draw(canvas)# 定义表格的行数和列数、边距
rows = g
cols = g
margin = by# 计算单元格的宽度和高度
cell_width = (b - 2 * margin) // cols
cell_height = (b - 2 * margin) // rows# 绘制表格的竖直线
for i in range(cols + 1):x = margin + i * cell_widthdraw.line([(x, margin), (x, b - margin)], fill=(0, 0, 0), width=2)# 绘制表格的水平线
for i in range(rows + 1):y = margin + i * cell_heightdraw.line([(margin, y), (b - margin, y)], fill=(0, 0, 0), width=2)# 保存画布
mb =f'{g}格模板.png'
canvas.save(path + fr'\{mb}')print('---2、计算三个坐标点的黑色三角形不重复图案有几个-------')# 创建一个空列表用于存储单元格的坐标
cell_coordinates = []# 计算每个单元格的四个顶点坐标
for row in range(rows):for col in range(cols):top_left = (margin + col * cell_width, margin + row * cell_height)top_right = (margin + (col + 1) * cell_width, margin + row * cell_height)bottom_left = (margin + col * cell_width, margin + (row + 1) * cell_height)bottom_right = (margin + (col + 1) * cell_width, margin + (row + 1) * cell_height)# 将四个顶点坐标添加到列表中cell_coordinates.append([top_left, top_right, bottom_left, bottom_right])
# print(cell_coordinates)
# print(len(cell_coordinates))
# 16
# [[(0, 0), (400, 0), (0, 400), (400, 400)], [(400, 0), (b, 0), (400, 400), (b, 400)], [(0, 400), (400, 400), (0, b), (400, b)], [(400, 400), (b, 400), (400, b), (b, b)]]import random
import oscombinations=[]
# 存储选取的点,随机生成坐标(样式)排除重复,生成10份样式不同的模版
while len(combinations) < f:selected_points = []for points in cell_coordinates:selected_points.append(tuple(random.sample(points, 3)))combinations.append(tuple(selected_points))print(combinations)
print(len(combinations))
#  10# # 生成所有组合方式,太多了,生成不出来
# combinations = lisitertools.product(*[itertools.combinations(sublist, 3) for sublist in cell_coordinates]))
# # print(combinations)
# print(len(combinations))
# # 262144print('---3、制作三个坐标点的黑色三角形(4个)-------')
from PIL import Image, ImageDrawnew = path + fr'\{g}宫格组合图片'
os.makedirs(new, exist_ok=True)m = 1
# 定义要绘制的坐标点组合
for point_combination in combinations:print(point_combination)# 清空selected_points列表selected_points = []# 遍历每个坐标点组合for combination in point_combination:# 从每个列表中随机选取三个点,并加入到selected_points中selected_points.append(tuple(random.sample(combination, 3)))# 读取图像文件image = Image.open(path + fr'\{mb}')# 创建绘图对象draw = ImageDraw.Draw(image)# 遍历每个坐标点组合for combination in selected_points:# 绘制填充为黑色的多边形draw.polygon(combination, fill="black")# 保存结果图像image.save(new + fr"\{m:03d}.png")image.close()  # 关闭图像文件m += 1print('---4合并打印------')# 第3步,读取图片写入docx,合并PDFimport os,time
from docx import Document
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from PyPDF2 import PdfMerger
from docx.shared import Cm# 读取123文件夹中的所有图片地址
image_folder = new
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)
image_files = [os.path.join(image_folder, file) for file in os.listdir(image_folder) if file.endswith('.png')]# 每8个图片一组进行处理
grouped_files = [image_files[i:i+6] for i in range(0, len(image_files), 6)]
print(grouped_files)# 处理每一组图片
for group_index, group in enumerate(grouped_files):# 创建新的Word文档doc = Document(path+r'\模板6格.docx')print(group)# 遍历每个单元格,并插入图片for cell_index, image_file in enumerate(group):# 计算图片长宽(单位:厘米)# 插入图片到单元格table = doc.tables[0]cell = table.cell(int(cell_index / 2), cell_index % 2)# 6列两个都是6cell_paragraph = cell.paragraphs[0]cell_paragraph.clear()run = cell_paragraph.add_run()run.add_picture(image_file, width=Cm(9.4), height=Cm(9.4))# 保存Word文档doc.save(os.path.join(new_folder, f'{group_index + 1}.docx'))# 所有docx合并成PDF# 将10个docx转为PDF
import os
from docx2pdf import convert
from PyPDF2 import PdfFileMerger
# from PyPDF4 import PdfMerger# output_folder = output_folder
pdf_output_path = path+fr'\黑白三角{g}宫格随机{f}张(6张一页).pdf'# 将所有DOCX文件转换为PDF
for docx_file in os.listdir(new_folder):if docx_file.endswith('.docx'):docx_path = os.path.join(new_folder, docx_file)convert(docx_path, docx_path.replace('.docx', '.pdf'))# 合并零时文件里所有PDF文件
merger = PdfFileMerger()
for pdf_file in os.listdir(new_folder):if pdf_file.endswith('.pdf'):pdf_path = os.path.join(new_folder, pdf_file)merger.append(pdf_path)
time.sleep(2)# 保存合并后的PDF文件
merger.write(pdf_output_path)
merger.close()import shutil
# 删除输出文件夹shutil.rmtree(new_folder)

3*3的黑白三角拼图,随机抽取10张样图

这篇关于【教学类-58-02】黑白三角拼图02(3*3宫格)262144种的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1000257

相关文章

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

MySQL record 02 part

查看已建数据库的基本信息: show CREATE DATABASE mydb; 注意,是DATABASE 不是 DATABASEs, 命令成功执行后,回显的信息有: CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTION=‘N’ / CREATE DATABASE myd

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

《教学与管理》

《教学与管理》系国家新闻出版总署批准,面向国内外公开发行的教育类学术期刊。《教学与管理》国际标准刊号ISSN1004-5872,国内统一刊号CN14-1024/G4。 教学与管理来稿注意事项 ■本刊主要设有“理论研究、教育观察、办学改革、学校管理、班级管理、教研活动、教育法制、德育建设、课程建设、教学研究、教学方法、教材研究、教学评价、学法指导、考试研究、比较教育”等栏目。 ■本刊读者对象为

滚雪球学MyBatis(02):环境搭建

环境搭建 前言 欢迎回到我们的MyBatis系列教程。在上一期中,我们详细介绍了MyBatis的基本概念、特点以及它与其他ORM框架的对比。通过这些内容,大家应该对MyBatis有了初步的了解。今天,我们将从理论走向实践,开始搭建MyBatis的开发环境。了解并掌握环境搭建是使用MyBatis的第一步,也是至关重要的一步。 环境搭建步骤 在开始之前,我们需要准备一些必要的工具和软件,包括J

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi

2025年25届计算机毕业设计:如何实现高校实验室Java SpringBoot教学管理系统

✍✍计算机毕业编程指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、Python、微信小程序、大数据实战项目集 ⚡⚡文末获取源码 文章目录 ⚡⚡文末获取源码高校实验室教学管理系统-研究背景高校实验室教学管理系

【SpringMVC学习02】SpringMVC入门程序

转自:http://blog.csdn.net/yerenyuan_pku/article/details/72231272 现有这样一个需求:使用SpringMVC这个框架实现商品列表的展示。这是我对这个需求的分析:我这里假设请求的url为/itemList.action,由于我想要展示商品列表,所以是并不需要传递参数的,再次是这里仅仅是一个SpringMVC的一个入门小程序,并不会与MyBa

02 Shell Script注释和debug

Shell Script注释和debug 一、ShellScript注释 ​ # 代表不解释不执行 ​ 语法:# # 创建myshell.sh文件[root@localhost ~]# vi myshell.sh # 写入内容#!/bin/bash# 打印hello world(正确)echo "hello world"echo "hello 2" # 注释2(正确)echo