首页 > 其他分享 >【教学类-58-09】黑白三角拼图07(1页3张黑白的白点卡片,一种宫格36张,适合一个班级一次操作)

【教学类-58-09】黑白三角拼图07(1页3张黑白的白点卡片,一种宫格36张,适合一个班级一次操作)

时间:2024-06-01 23:31:25浏览次数:29  
标签:09 黑白 cell width radius path 宫格 margin 255

背景需求

之前做了传统三角拼图,但是感觉幼儿遇到一些平行四边形时,都不知道要连接那几个点。

【教学类-58-03】黑白三角拼图03(4*4宫格)总数算不出+随机抽取10张-CSDN博客文章浏览阅读864次,点赞27次,收藏16次。【教学类-58-03】黑白三角拼图03(4*4宫格)总数算不出+随机抽取10张https://blog.csdn.net/reasonsummer/article/details/139177898

把黑白改成彩色,并且在每个单元格四个坐标焦点处添加了黑色的圆点坐标

【教学类-58-06】黑白三角拼图06(1页3张彩色黑点卡片,一种宫格36张,适合一个班级一次操作)-CSDN博客文章浏览阅读726次,点赞12次,收藏4次。【教学类-58-06】黑白三角拼图06(1页3张彩色黑点卡片,一种宫格36张,适合一个班级一次操作)https://blog.csdn.net/reasonsummer/article/details/139275730

制作了带有黑色圆点坐标记号的彩色三角拼图。

但是同样的方法(添加黑色小圆点)对黑白三角来说会不明显(黑色三角的三个角上再加一个黑色的圆。

所以我想在黑白三角图片上,把单元格个的坐标小圆点改成黑线白底。

修改这里

代码展示

'''

黑白三角图,2宫格36张,3宫格36张……适合班级全体操作,小圆点是黑框白填充

随机图片
AI对话大师,阿夏
2024年5月24日

'''
import os 
from PIL import Image, ImageDraw

for ys in range(12, 13):
    path = r'C:\Users\jg2yXRZ\OneDrive\桌面\黑白三角'
    new = path + fr'\1-10宫格组合图片'
    os.makedirs(new, exist_ok=True)
    radius = 5
    f = 3 * ys  # 一页6张

    b = 400  # 画布大小
    by = 10  # 边距

    for g in range(2, 11):
        for c in range(1, f + 1):
            # 创建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_width
                draw.line([(x, margin), (x, b - margin)], fill=(0, 0, 0), width=2)

            # 绘制表格的水平线
            for i in range(rows + 1):
                y = margin + i * cell_height
                draw.line([(margin, y), (b - margin, y)], fill=(0, 0, 0), width=2)

            # 绘制每个单元格的左上角、右上角、左下角、右下角的黑色圆形
            
            for i in range(rows):
                for j in range(cols):
                    left = margin + j * cell_width
                    upper = margin + i * cell_height
                    right = left + cell_width
                    lower = upper + cell_height

                    # 绘制黑色圆形fill=(0, 0, 0), width=5)
                    draw.ellipse([(left - radius, upper - radius), (left + radius, upper + radius)],                                 
                                outline=(0, 0, 0), fill=(255, 255, 255), width=2)   
                    draw.ellipse([(right - radius, upper - radius), (right + radius, upper + radius)],
                                outline=(0, 0, 0), fill=(255, 255, 255), width=2)   
                    draw.ellipse([(left - radius, lower - radius), (left + radius, lower + radius)],
                                outline=(0, 0, 0), fill=(255, 255, 255), width=2)   
                    draw.ellipse([(right - radius, lower - radius), (right + radius, lower + radius)],
                                outline=(0, 0, 0), fill=(255, 255, 255), width=2)   

            # 保存画布
            mb = f'{g:05d}格{c:05d}02模板{c:05d}.png'
            canvas.save(new + 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 os

            combinations=[]
            # 存储选取的点,随机生成坐标(样式)排除重复,生成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

            print('---3、制作三个坐标点的黑色三角形(4个)-------')
            from PIL import Image, ImageDraw


            
            # 定义要绘制的坐标点组合
            
            for point_combination in combinations:
                print(point_combination)
                
                # 清空selected_points列表
                selected_points = []
                h=1
                # 遍历每个坐标点组合
                for combination in point_combination:
                    # 从每个列表中随机选取三个点,并加入到selected_points中
                    selected_points.append(tuple(random.sample(combination, 3)))

                        # 读取图像文件
#                创建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_width
                    draw.line([(x, margin), (x, b - margin)], fill=(0, 0, 0), width=2)

                # 绘制表格的水平线
                for i in range(rows + 1):
                    y = margin + i * cell_height
                    draw.line([(margin, y), (b - margin, y)], fill=(0, 0, 0), width=2)
                color=['black','black']
                # 遍历每个坐标点组合
                for combination in selected_points:
                    # 绘制填充为黑色的多边形
                
                    # draw.polygon(combination, fill='black',outline=(255, 255, 255), width=1)
                    draw.polygon(combination, fill=random.choice(color), outline=(0, 0, 0), width=2)

      

                # 绘制每个单元格的左上角、右上角、左下角、右下角的黑色圆形
                
                for i in range(rows):
                    for j in range(cols):
                        left = margin + j * cell_width
                        upper = margin + i * cell_height
                        right = left + cell_width
                        lower = upper + cell_height

                        # 绘制黑色圆形(黑线白填充)
                        draw.ellipse([(left - radius, upper - radius), (left + radius, upper + radius)],
                                    outline=(0, 0, 0), fill=(255, 255, 255), width=2)                       
                        draw.ellipse([(right - radius, upper - radius), (right + radius, upper + radius)],
                                    outline=(0, 0, 0), fill=(255, 255, 255), width=2)
                        draw.ellipse([(left - radius, lower - radius), (left + radius, lower + radius)],
                                    outline=(0, 0, 0), fill=(255, 255, 255), width=2)
                        draw.ellipse([(right - radius, lower - radius), (right + radius, lower + radius)],
                                    outline=(0, 0, 0), fill=(255, 255, 255), width=2)

                

                # 保存结果图像
                canvas.save(new + fr'\{g:05d}格{c:05d}01图纸{c:05d}.png')
                
                canvas.close()  # 关闭图像文件
    
                        
            




    # # print('---4合并打印------')


    # 第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:03d}.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'\黑白三角1-10宫格随机每款{ys}张{ys*3}人使用 一黑一白黑点黑边黑白.pdf'
    # pdf_output_path = path+fr'\黑白三角1-10宫格随机每款{f*ys}图共{ys}张一黑一白黑点白边黑白.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
    # 删除输出文件夹
    import time
    shutil.rmtree(new_folder)
    shutil.rmtree(new)
    time.sleep(2)

12张(36小图)依旧生成了近半个小时。

有了黑线白底小圆圈的坐标提示,幼儿可以就清楚画线的位置(两点连线),提升正确率

标签:09,黑白,cell,width,radius,path,宫格,margin,255
From: https://blog.csdn.net/reasonsummer/article/details/139381382

相关文章

  • 【教学类-58-06】黑白三角拼图06(1页3张彩色黑点卡片,一种宫格36张,适合一个班级一次操作
    作品展示背景需求【教学类-58-05】黑白三角拼图05(2-10宫格,每个宫格随机1张-6张,带空格纸,1页3张黑白3张白卡)-CSDN博客文章浏览阅读343次,点赞10次,收藏6次。【教学类-58-05】黑白三角拼图05(2-10宫格,每个宫格随机1张-6张,带空格纸,1页3张黑白3张白卡)https://blog.csdn.net/reasons......
  • Shell阶段09 shell正则,grep正则, sed使用及案例
    Shell正则[root@shell01shell13]#grep-E'root|nginx|mysql|www'passwd通配符及特殊符号*#所有.#当前目录..#当前目录的上级目录-#当前目录的上一次所在的目录~#家目录##注释,超级管理员的命令行提示符$#引......
  • CS8509E 贴片8脚 音频功放IC 芯片 SOP8
    CS8509E音频放大器在音响设备中的具体应用案例包括但不限于以下几种: 1.蓝牙音箱:在无线蓝牙音箱中,CS8509E可用于驱动扬声器,提供清晰、强劲的声音输出。 2.智能家居音响:智能家居设备,如智能助手或家用音响系统,可能会使用CS8509E来实现高质量的声音放大。 3.便携式扩音......
  • 使用Spring Boot自定义注解 + AOP实现基于IP的接口限流和黑白名单
    ......
  • 洛谷1090 合并果子 【贪心】
    [NOIP2004提高组]合并果子/[USACO06NOV]FenceRepairG题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出......
  • 091、寄左省杜拾遗
    091、寄左省杜拾遗唐●岑参联步趋丹陛,分曹限紫微。晓随天仗入,暮惹御香归。白发悲花落,青云羡鸟飞。圣朝无阙事,自觉谏书稀。 【现代诗意译】寄左省杜拾遗同你一起步行,登上皇家红色台阶,分别到自己的官署办公。早晨,跟着天子仪仗进入朝堂,傍晚,带着御香归家。 就这样,......
  • 【教学类-60-01】彩色消划掉01(四个数字,X*Y宫格)
    背景需求:......
  • P2167 [SDOI2009] Bill的挑战
    P2167[SDOI2009]Bill的挑战状压dp/二项式反演先说状压,考虑怎么刻画\(S\)和\(T\)匹配这个东西。实质上就是从前往后匹配每一位,直到哪一位不匹配了,那么就不匹配,也就是每一位字符匹配的并集。同样,对于多个串的匹配,设第\(i\)位字符为\(j\)时匹配的串集合为\(g_{i,j}\),对......
  • UES-09-类
    仿类结构先创建一个构造器函数,然后在这个函数的原型中存储方法,这个构造器函数生成的实例从原型继承了存储的方法。functionCon(n){this.n=n;}Con.prototype.fun=function(){console.log(this.n);};letc=newCon("zzz");c.fun();//"zzz"类的声明cla......
  • P10543 [THUPC2024] 黑白
    MyBlogsP10543[THUPC2024]黑白签到题。首先要判联通性。判完之后,统计全局的白格子个数\(s\)。因为删到最后,一定会留下一条白色路径,然后路径的长度在\(\bmod\;2\)意义下和\(n+m-1\)同余。而我们只关心能操作次数的奇偶性,所以只需要判断\(s-n-m\)的奇偶性即可。 int......