【教學類-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分鐘才生成完成

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14334.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習之基于Matlab卷積神經網絡(CNN)手寫數字識別

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 手寫數字識別是計算機視覺領域的一個重要問題,也是深度學習應用的一個典型場景。卷…

什么是固態繼電器?

固態繼電器是不需要使用任何機械部件的開關繼電器。這通常使它們具有比普通機電繼電器壽命更長的優勢,然而,盡管固態繼電器速度快且耐用,但仍具有某些設計規定。 固態繼電器風靡全球,徹底改變了從農業自動化到航空航天等各個行業…

中國數學會發布數學期刊分級目錄

T1,T2,T3均是中國數學會的期刊分類 下載地址: 中國數學會發布數學期刊分級目錄-太原理工大學數學學院 (tyut.edu.cn)

銀行總部文件自動下發,如何保證不影響專線網絡使用?

銀行在我國金融體系中占據重要地位,是我國市場經濟的重要組成部分。我國商業銀行隨著自身不斷發展,規模日益擴大,形成了“總行-分行-支行-營業網點”的典型層級管理模式。在日常中,銀行總部存在文件下發的場景: 銀行總…

1.4 接入網和物理媒體

接入網絡和物理媒體 Q: 怎樣將端系統和邊緣路由器連接? 住宅接入網絡 單位接入網絡 (學校、公司) 無線接入網絡 注意: 接入網絡的帶寬 (bits persecond) ? 共享/專用? 接入網: 這是指將端系統物理連接到其…

數學基礎 -- 條件概率、后驗概率與聯合概率

條件概率與后驗概率 技術背景 條件概率和后驗概率是概率論中的兩個重要概念,在機器學習和貝葉斯推理中尤為關鍵。理解這兩個概念對于處理不確定性和進行推理具有重要意義。本文將通過直觀的例子和數學解釋來詳細介紹條件概率與后驗概率。 條件概率 條件概率是指…

Linux rzsz安裝(在線安裝、離線安裝),用于上傳下載文件

在線安裝: yum -y install lrzsz 離線安裝: 1.下載安裝包地址:http://freshmeat.sourceforge.net/projects/lrzsz/ 2.通過同一網絡內可以上傳文件的機器(B機:10.210.168.18)先將lrzsz-0.12.20.tar.gz上傳至…

盤點Java中的排序操作方案

盤點Java中的排序操作方案 Comparable 接口-自然排序 類implements Comparable接口 類重寫 public int compareTo(Object obj)方法 如果返回值為正數,則表示當前對象(調用該方法的對象)比 obj 對象“大”;反之“小”;如果為零的話&#x…

多家知名媒體到訪“光子1號金融算力中心“ 交流AI與算力未來觀

5月23日,企商在線 “光子1號金融算力中心媒體參觀日”活動成功舉辦,十多家主流媒體、IT行業媒體及自媒體代表走進光子1號金融算力中心,深入了解企商業務發展、戰略規劃及“光子1號金融算力中心”等企商打造的新型數字基礎設施,共同…

Python條件分支與循環

大家好,當涉及到編寫高效和靈活的程序時,條件分支和循環是 Python 中至關重要的概念。它們允許我們根據不同的條件執行不同的代碼塊,或者重復執行一組語句。條件分支和循環是測試開發工程師在日常工作中經常使用的工具,無論是編寫…

光耦合器的特性和應用概述

光耦合器又稱光電耦合器,是現代電子學中必不可少的元件,確保隔離電路之間安全有效的信號傳輸。本文探討了光耦合器的特性及其多樣化應用,強調了它們在各種電子系統中的關鍵作用。 什么是光耦合器? 光耦合器是一種設計用于利用光傳…

Java 18新特性詳細介紹

Java作為一門廣泛使用的編程語言,一直在不斷地發展和更新。Java 18是Java的最新版本,它引入了許多新特性和改進,使得開發過程更加高效、安全和便捷。本文將詳細介紹Java 18的新特性,幫助開發者更好地了解和應用這些新功能。 JEP …

vue詳解(4)

1. v-model 原理 原理:v-model本質上是一個語法糖。例如應用在輸入框上,就是 value屬性 和 input事件 的合寫。作用:提供數據的雙向綁定。① 數據變,視圖跟著變 :value;② 視圖變,數據跟著變 input注意&am…

【MySQL數據庫】CRUD 增 刪 改 查 超詳解,有這一篇就夠了!

? ? 🔥個人主頁: 中草藥 🔥專欄:【MySQL】探秘:數據庫世界的瑞士軍刀 目錄 ??一.CRUD 🧪二.新增(Create) 🧫1.基本操作 🧬2.使用SELECT插入 &#x…

長難句5.24

There is pressure for change from within the profession, but opponents of change among the regulators insist that keeping outsiders out of a law firm isolates lawyers from the pressure to make money rather than serve clients ethically. 在(律師)行業內部也有…

云計算歷史、業務驅動因素和術語 (Cloud Computing History, Business Drivers and Terminologies)

云計算的歷史與定義 (History and Definition of Cloud Computing) 歷史 (History) 云計算的概念化始于很久以前,早在1963年。麻省理工學院從美國國防高級研究計劃局獲得研究資金,用于開發一種“計算機可同時被兩人或更多人使用”的技術。在早期的云計算…

區塊鏈錢包如果丟失了私鑰或助記詞,資產還能恢復嗎?

如果你丟失了區塊鏈錢包的私鑰或助記詞(通常是用于恢復錢包的短語或種子),那么你的資產在大多數情況下是無法恢復的。私鑰是訪問和控制你在區塊鏈上資產的唯一憑證,而助記詞(如BIP39標準中的12、18、24個單詞的短語&am…

centos常見命令總結

一、【寫在前面】 注意到csdn在鼓勵作者創作centos常見命令相關的文章,借此機會水一篇博文。 centos作為上個版本國內最常用的開源操作系統,占有量非常恐怖,排個前三應該沒有任何疑問。但是我建議直接去學ubuntu,因為主流在用的…

【系統架構師】-案例篇(十五)SOA、微服務與數據庫

1、可復用構件應具備哪些屬性 可用性:構件必須易于理解和使用。 質量:構件及其變形必須能正確工作。 適應性:構件應該易于通過參數化等方式在不同語境中進行配置。 可移植性:構件應能在不同的硬件運行平臺和軟件環境中工作。 可變…

Spring Boot實現RabbitMQ監聽消息的幾種方式

Spring Boot實現RabbitMQ監聽消息的幾種方式 在現代的分布式系統中,消息隊列扮演著至關重要的角色,用于解耦服務之間的通信,實現異步消息傳遞。而RabbitMQ作為其中一種常用的消息隊列服務,在Spring Boot中得到了廣泛的應用。本文…