【教学类-50-07】20240411“数一数”图片中四种图形出现的数量随机或固定

news2025/6/23 14:36:56

 

背景需求

今天孩子们点数时,我核对答案,突然发现有两张图片上的三角、正方、椭圆、圆形只有1个,我感觉这个随机的概率有问题。

仔细点数后发现以下代码生成的几何图形数量是相同的

(如果三角有3个,那么正方形、圆形和椭圆形都是3个)(如果三角有1个,那么正方形、圆形和椭圆形都是1个)c939e426573c4a7eb22d3596d1b4397f.png

【教学类-50-01】20240407“数一数”图片样式01:纯色图形与边框不相交,纯色图形和其他纯色图形不相交-CSDN博客文章浏览阅读606次,点赞31次,收藏13次。【教学类-50-01】20240407“数一数”图片样式01:纯色图形与边框不相交,纯色图形和其他纯色图形不相交https://blog.csdn.net/reasonsummer/article/details/137511583

产生原因:随机抽取了一个数量,并且每个图形都用了这个数量

1fd4273cc9e64fe7b09ba47588e6dd6e.png

 

一、一张图上,四种图案出现数量不相等(随机1-4)

代码需要修改为

f0f1f27af3fd4875922c494cc5a4ebb1.png

代码展示:

'''
中班个别化学习材料-数形颜色的点数-难度1.0
1、图形都在边框内(没有遮挡)
2、图形之间不相交(没有重叠部分)
3、颜色是最深的(因为没有重叠,不需要降低透明度)
4、每个图形随机抽取的数量不相等
作者:AI对话大师、阿夏
时间:2024年4月10日 20:00
'''
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np
import os
import random
import time
from shapely.geometry import Polygon
from shapely.ops import cascaded_union

c = int(input('画布大小(c)\n'))
num=int(input('多少张\n'))
alp=float(input('透明度(0.3=透明重叠,1.0=分开纯色)\n'))

# 创建目录
output_dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\个别化\01框内不连接'
os.makedirs(output_dir, exist_ok=True)

# 随机生成多个等腰直角三角形
for i in range(num):
    # 创建画布
    fig, ax = plt.subplots(figsize=(c, c))
    ax.set_xlim([0, c])
    ax.set_ylim([0, c])

    # 随机几个图形
    num_triangles = random.randint(1, 4)
    num_square = random.randint(1, 4)
    num_cicle = random.randint(1, 4)
    num_ellipse = random.randint(1, 4)
    num_rectangle = random.randint(1, 4)

    colors = ['red', 'yellow', 'blue']
    shapes = []
    for _ in range(num_triangles):
        while True:
            # 随机生成等腰直角三角形的顶点坐标
            base_point = np.random.rand(2) * c
            side_length = np.random.rand() * 2 + 1

            # 计算等腰直角三角形的顶点坐标
            top_point = base_point + np.array([side_length, 0])
            height_point = base_point + np.array([0, side_length])

            # 检查三角形是否在画布内部
        
            triangle = Polygon([base_point, top_point, height_point])
            if np.all(base_point >= 0) and np.all(top_point <= c) and np.all(height_point <= c) and not any(shape.intersects(triangle) for shape in shapes):
                break

        # 随机选择颜色
        color = np.random.choice(colors)

        # 创建并填充等腰直角三角形
        triangle_vertices = np.array([base_point, top_point, height_point])
        triangle = Polygon(triangle_vertices)
        triangle_patch = patches.Polygon(triangle_vertices, closed=True, alpha=alp, color=color)
        ax.add_patch(triangle_patch)
        shapes.append(triangle)

    # 随机生成正方形
    for _ in range(num_square):
        while True:
            # 随机生成正方形的中心点坐标
            center = np.random.rand(2) * c

            # 随机生成正方形的边长
            side_length = np.random.rand() * 2 + 1

            # 检查正方形是否在画布内部
            square = Polygon([(center[0]-side_length/2, center[1]-side_length/2), (center[0]+side_length/2, center[1]-side_length/2),
                              (center[0]+side_length/2, center[1]+side_length/2), (center[0]-side_length/2, center[1]+side_length/2)])
            if np.all(center - side_length/2 >= 0) and np.all(center + side_length/2 <= c) and not any(shape.intersects(square) for shape in shapes):
                break

        # 随机选择颜色
        color = np.random.choice(colors)

        # 创建并填充正方形
        square_patch = patches.Rectangle((center[0]-side_length/2, center[1]-side_length/2), side_length, side_length, alpha=alp, color=color)
        ax.add_patch(square_patch)
        shapes.append(square)

    # 随机生成圆形
    for _ in range(num_cicle):
        while True:
            # 随机生成圆形的中心点坐标
            center = np.random.rand(2) * c

            # 随机生成圆形的半径
            radius = np.random.rand() * 2 + 1

            # 检查圆形是否在画布内部
            circle = Polygon([(center[0]-radius, center[1]-radius), (center[0]+radius, center[1]-radius),
                              (center[0]+radius, center[1]+radius), (center[0]-radius, center[1]+radius)])
            if np.all(center - radius >= 0) and np.all(center + radius <= c) and not any(shape.intersects(circle) for shape in shapes):
                break

        # 随机选择颜色
        color = np.random.choice(colors)

        # 创建并填充圆形
        circle_patch = patches.Circle((center[0], center[1]), radius, alpha=alp, color=color)
        ax.add_patch(circle_patch)
        shapes.append(circle)

    # 随机生成椭圆形
    for _ in range(num_ellipse):
        while True:
            # 随机生成椭圆形的中心点坐标
            center = np.random.rand(2) * c

            # 随机生成椭圆形的长轴和短轴
            major_axis = np.random.rand() * 2 + 1
            minor_axis = np.random.rand() * 2 + 1

            # 检查椭圆形是否在画布内部
            ellipse_vertices = []
            num_points = 100
            angle = np.linspace(0, 2 * np.pi, num_points)
            for a in angle:
                x = center[0] + major_axis / 2 * np.cos(a)
                y = center[1] + minor_axis / 2 * np.sin(a)
                ellipse_vertices.append([x, y])
            ellipse = Polygon(ellipse_vertices)
            if np.all(center - np.array([major_axis, minor_axis]) / 2 >= 0) and np.all(
                    center + np.array([major_axis, minor_axis]) / 2 <= c) and not any(
                shape.intersects(ellipse) for shape in shapes):
                break

        # 随机选择颜色
        color = np.random.choice(colors)

        # 创建并填充椭圆形
        ellipse_patch = patches.Ellipse((center[0], center[1]), major_axis, minor_axis, alpha=alp, color=color)
        ax.add_patch(ellipse_patch)
        shapes.append(ellipse)

    # # 随机生成长方形
    # for _ in range(num_rectangle):
    #     while True:
    #         # 随机生成长方形的中心点坐标
    #         center = np.random.rand(2) * c

    #         # 随机生成长方形的长和宽
    #         width = np.random.rand() * 2 + 1
    #         height = np.random.rand() * 2 + 1

    #         # 检查长方形是否在画布内部
    #         rectangle = Polygon([(center[0] - width / 2, center[1] - height / 2),
    #                              (center[0] + width / 2, center[1] - height / 2),
    #                              (center[0] + width / 2, center[1] + height / 2),
    #                              (center[0] - width / 2, center[1] + height / 2)])
    #         if np.all(center - np.array([width, height]) / 2 >= 0) and np.all(
    #                 center + np.array([width, height]) / 2 <= c) and not any(
    #             shape.intersects(rectangle) for shape in shapes):
    #             break

    #     # 随机选择颜色
    #     color = np.random.choice(colors)

    #     # 创建并填充长方形
    #     rectangle_patch = patches.Rectangle((center[0] - width / 2, center[1] - height / 2), width, height,
    #                                         alpha=alp, color=color)
    #     ax.add_patch(rectangle_patch)
    #     shapes.append(rectangle)

    # 隐藏坐标轴
    ax.axis('off')

    # 保存图形
    output_path = os.path.join(output_dir, f'{i:02d}.png')
    plt.savefig(output_path, dpi=400, bbox_inches='tight')

    # 关闭画布
    plt.close(fig)

    # 暂停3秒
    time.sleep(3)

 

88d0e3f7ab3147e7971ca1286ca36367.png

这下四种图案出现的数量不会相等了。

436f322c0b7b495eb85a5c24d830597b.png

82ff732661034994a08c8f03b5610af8.png

27f088bee5e044dd89f039808f5893d0.png

现在每张图上,4种几何图案出现的数量不相等了。

 

二、一张图上,四种图案出现数量固定(确定、三角形4个、正方形3个,圆形2个,椭圆形1个)

如果图形的数量不用随机数,也可以指定数量

c8ac0e469c81468baf882eb094eea1d2.png

代码展示

'''
中班个别化学习材料-数形颜色的点数-难度1.0
1、图形都在边框内(没有遮挡)
2、图形之间不相交(没有重叠部分)
3、颜色是最深的(因为没有重叠,不需要降低透明度)
4、每个图形固定一个数量,图案数量限定
作者:AI对话大师、阿夏
时间:2024年4月10日 20:00
'''
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np
import os
import random
import time
from shapely.geometry import Polygon
from shapely.ops import cascaded_union

c = int(input('画布大小(c)\n'))
num=int(input('多少张\n'))
alp=float(input('透明度(0.3=透明重叠,1.0=分开纯色)\n'))

# 创建目录
output_dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\个别化\01框内不连接'
os.makedirs(output_dir, exist_ok=True)

# 随机生成多个等腰直角三角形
for i in range(num):
    # 创建画布
    fig, ax = plt.subplots(figsize=(c, c))
    ax.set_xlim([0, c])
    ax.set_ylim([0, c])

    # 随机几个图形
    num_triangles = 4
    num_square = 3
    num_cicle = 2
    num_ellipse =1
    num_rectangle = 2
    # num_triangles = random.randint(1, 4)
    # num_square = random.randint(1, 2)
    # num_cicle = random.randint(1, 3)
    # num_ellipse = random.randint(1, 1)
    # num_rectangle = random.randint(1, 2)

    colors = ['red', 'yellow', 'blue']
    shapes = []
    for _ in range(num_triangles):
        while True:
            # 随机生成等腰直角三角形的顶点坐标
            base_point = np.random.rand(2) * c
            side_length = np.random.rand() * 2 + 1

            # 计算等腰直角三角形的顶点坐标
            top_point = base_point + np.array([side_length, 0])
            height_point = base_point + np.array([0, side_length])

            # 检查三角形是否在画布内部
        
            triangle = Polygon([base_point, top_point, height_point])
            if np.all(base_point >= 0) and np.all(top_point <= c) and np.all(height_point <= c) and not any(shape.intersects(triangle) for shape in shapes):
                break

        # 随机选择颜色
        color = np.random.choice(colors)

        # 创建并填充等腰直角三角形
        triangle_vertices = np.array([base_point, top_point, height_point])
        triangle = Polygon(triangle_vertices)
        triangle_patch = patches.Polygon(triangle_vertices, closed=True, alpha=alp, color=color)
        ax.add_patch(triangle_patch)
        shapes.append(triangle)

    # 随机生成正方形
    for _ in range(num_square):
        while True:
            # 随机生成正方形的中心点坐标
            center = np.random.rand(2) * c

            # 随机生成正方形的边长
            side_length = np.random.rand() * 2 + 1

            # 检查正方形是否在画布内部
            square = Polygon([(center[0]-side_length/2, center[1]-side_length/2), (center[0]+side_length/2, center[1]-side_length/2),
                              (center[0]+side_length/2, center[1]+side_length/2), (center[0]-side_length/2, center[1]+side_length/2)])
            if np.all(center - side_length/2 >= 0) and np.all(center + side_length/2 <= c) and not any(shape.intersects(square) for shape in shapes):
                break

        # 随机选择颜色
        color = np.random.choice(colors)

        # 创建并填充正方形
        square_patch = patches.Rectangle((center[0]-side_length/2, center[1]-side_length/2), side_length, side_length, alpha=alp, color=color)
        ax.add_patch(square_patch)
        shapes.append(square)

    # 随机生成圆形
    for _ in range(num_cicle):
        while True:
            # 随机生成圆形的中心点坐标
            center = np.random.rand(2) * c

            # 随机生成圆形的半径
            radius = np.random.rand() * 2 + 1

            # 检查圆形是否在画布内部
            circle = Polygon([(center[0]-radius, center[1]-radius), (center[0]+radius, center[1]-radius),
                              (center[0]+radius, center[1]+radius), (center[0]-radius, center[1]+radius)])
            if np.all(center - radius >= 0) and np.all(center + radius <= c) and not any(shape.intersects(circle) for shape in shapes):
                break

        # 随机选择颜色
        color = np.random.choice(colors)

        # 创建并填充圆形
        circle_patch = patches.Circle((center[0], center[1]), radius, alpha=alp, color=color)
        ax.add_patch(circle_patch)
        shapes.append(circle)

    # 随机生成椭圆形
    for _ in range(num_ellipse):
        while True:
            # 随机生成椭圆形的中心点坐标
            center = np.random.rand(2) * c

            # 随机生成椭圆形的长轴和短轴
            major_axis = np.random.rand() * 2 + 1
            minor_axis = np.random.rand() * 2 + 1

            # 检查椭圆形是否在画布内部
            ellipse_vertices = []
            num_points = 100
            angle = np.linspace(0, 2 * np.pi, num_points)
            for a in angle:
                x = center[0] + major_axis / 2 * np.cos(a)
                y = center[1] + minor_axis / 2 * np.sin(a)
                ellipse_vertices.append([x, y])
            ellipse = Polygon(ellipse_vertices)
            if np.all(center - np.array([major_axis, minor_axis]) / 2 >= 0) and np.all(
                    center + np.array([major_axis, minor_axis]) / 2 <= c) and not any(
                shape.intersects(ellipse) for shape in shapes):
                break

        # 随机选择颜色
        color = np.random.choice(colors)

        # 创建并填充椭圆形
        ellipse_patch = patches.Ellipse((center[0], center[1]), major_axis, minor_axis, alpha=alp, color=color)
        ax.add_patch(ellipse_patch)
        shapes.append(ellipse)

    # # 随机生成长方形
    # for _ in range(num_rectangle):
    #     while True:
    #         # 随机生成长方形的中心点坐标
    #         center = np.random.rand(2) * c

    #         # 随机生成长方形的长和宽
    #         width = np.random.rand() * 2 + 1
    #         height = np.random.rand() * 2 + 1

    #         # 检查长方形是否在画布内部
    #         rectangle = Polygon([(center[0] - width / 2, center[1] - height / 2),
    #                              (center[0] + width / 2, center[1] - height / 2),
    #                              (center[0] + width / 2, center[1] + height / 2),
    #                              (center[0] - width / 2, center[1] + height / 2)])
    #         if np.all(center - np.array([width, height]) / 2 >= 0) and np.all(
    #                 center + np.array([width, height]) / 2 <= c) and not any(
    #             shape.intersects(rectangle) for shape in shapes):
    #             break

    #     # 随机选择颜色
    #     color = np.random.choice(colors)

    #     # 创建并填充长方形
    #     rectangle_patch = patches.Rectangle((center[0] - width / 2, center[1] - height / 2), width, height,
    #                                         alpha=alp, color=color)
    #     ax.add_patch(rectangle_patch)
    #     shapes.append(rectangle)

    # 隐藏坐标轴
    ax.axis('off')

    # 保存图形
    output_path = os.path.join(output_dir, f'{i:02d}.png')
    plt.savefig(output_path, dpi=400, bbox_inches='tight')

    # 关闭画布
    plt.close(fig)

    # 暂停3秒
    time.sleep(3)

88d0e3f7ab3147e7971ca1286ca36367.png

点数验证——每张偏上都是三角形4个、正方形3个,圆形2个,椭圆形1个

04ea5b20a34646a09d9aca9c4d5f78cc.pngcb79e4458f0b48598e33673f77a2e5f8.png

133fc38ada0d4769b9c1bcc19bfe63b6.png

1f9ae41671e84b0b8c26b9dd1e7b4d20.png

87dab3a23ab34d09b38e57e473d50688.png

这种方式生成N张几何图案出现位置不同的图片,但是最后的答案是一样的(10个图案,三角形4个、正方形3个,圆形2个,椭圆形1个)

这样就不用老师自己去点数,来浪费验证时间了。比较适合集体教学活动。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回

背景描述 这一节内容比较复杂&#xff1a; 涉及到使用工具进行百科的检索&#xff08;有现成的插件&#xff09;有AgentExecutor来帮助我们执行后续由于上下文过大&#xff0c; 我们通过计算num_tokens&#xff0c;来控制我们的上下文 安装依赖 pip install --upgrade --qu…

上海亚商投顾:创业板指低开低走 低空经济概念股尾盘拉升

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日集体调整&#xff0c;沪指午后跌超1%&#xff0c;深成指、创业板指盘中跌超2%&#xff0c;尾盘跌…

【机器学习】数学基础详解

线性代数&#xff1a;构建数据的骨架 数学对象 标量&#xff08;Scalar&#xff09; 标量是最基本的数学对象&#xff0c;代表了单个的数值&#xff0c;无论是整数还是实数。在机器学习中&#xff0c;标量可以用来表示一个模型的单个参数&#xff0c;如偏差&#xff08;bias&…

appium driver install uiautomator2 安装失败

报错 Installing ‘uiautomator2’ using NPM install spec ‘appium-uiautomator2-driver’ Error: Encountered an error when installing package: npm command ‘install --save-dev --no-progress --no-audit --omitpeer --save-exact --global-style --no-package-lock…

深度学习之使用BP神经网络识别MNIST数据集

目录 补充知识点 torch.nn.LogSoftmax() torchvision.transforms transforms.Compose transforms.ToTensor transforms.Normalize(mean, std) torchvision.datasets MNIST&#xff08;手写数字数据集&#xff09; torch.utils.data.DataLoader torch.nn.NLLLoss() to…

LVM逻辑卷管理器

LVM是Linux系统对硬盘分区进行管理的一种机制&#xff0c;在硬盘分区和文件系统之间添加了一个逻辑层&#xff0c;它提供了一个抽象的卷组&#xff0c;可以把多块硬盘进行卷组合并。这样&#xff0c;用户无需关心物理硬盘设备的底层架构和布局&#xff0c;就可以实现对硬盘分区…

智过网:注册安全工程师注册有效期与周期解析

在职业领域&#xff0c;各种专业资格认证不仅是对从业者专业能力的认可&#xff0c;也是保障行业安全、规范发展的重要手段。其中&#xff0c;注册安全工程师证书在安全生产领域具有举足轻重的地位。那么&#xff0c;注册安全工程师的注册有效期是多久呢&#xff1f;又是几年一…

Unity 九宫格

1. 把图片拖拽进资源文件夹 2.选中图片&#xff0c;然后设置图片 3.设置九宫格 4.使用图片&#xff0c;在界面上创建2个相同的Image,然后使用图片&#xff0c;修改Image Type 为Sliced

图书推荐:《和AI一起编程》

《Coding with AI For Dummies》这本书由Chris Minnick撰写&#xff0c;主要分为四个部分&#xff0c;涵盖了与AI相结合的编程技术、AI编码工具的应用、利用AI编写代码的具体实践&#xff0c;以及测试、文档编制和维护代码的相关内容。 克里斯明尼克(Chris Minnick)&#xff1a…

【论文阅读】MCTformer: 弱监督语义分割的多类令牌转换器

【论文阅读】MCTformer: 弱监督语义分割的多类令牌转换器 文章目录 【论文阅读】MCTformer: 弱监督语义分割的多类令牌转换器一、介绍二、联系工作三、方法四、实验结果 Multi-class Token Transformer for Weakly Supervised Semantic Segmentation 本文提出了一种新的基于变换…

数字化浪潮下,制造业如何乘势而上实现精益生产

随着数字化技术的迅猛发展&#xff0c;制造业正迎来前所未有的变革机遇。本文将探讨如何利用数字化手段助推制造业实现精益生产&#xff0c;从而在激烈的市场竞争中脱颖而出。 1、构建智能化生产系统 借助物联网技术&#xff0c;实现设备之间的互联互通&#xff0c;构建智能化…

最祥解决python 将Dataframe格式数据上传数据库所碰到的问题

碰到的问题 上传Datafrane格式的数据到数据库 会碰见很多错误 举几个很普遍遇到的问题(主要以SqlServer举例) 这里解释下 将截断字符串或二进制数据 这个是字符长度超过数据库设置的长度 然后还有字符转int失败 或者字符串转换日期/或时间失败 这个是碰到的需要解决的最多的问…

比特币减半后 牛市爆发

作者&#xff1a;Arthur Hayes of Co-Founder of 100x 编译&#xff1a;Qin jin of ccvalue (以下内容仅代表作者个人观点&#xff0c;不应作为投资决策依据&#xff0c;也不应被视为参与投资交易的建议或意见&#xff09;。 Ping PingPing&#xff0c;我的手机发出的声音&…

词频统计程序

使用Hadoop MapReduce处理文本文件&#xff0c;Mapper负责将文本分割为单词&#xff0c;然后Reducer对每个单词进行计数&#xff0c;最后将结果写入输出文件。 // 定义WordCount公共类 public class WordCount {// 主入口方法&#xff0c;处理命令行参数public static void m…

C语言进阶|顺序表

✈顺序表的概念及结构 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串.. 线性表在逻辑上是线性结构&#xff0c;也就说是连…

推荐学习什么编程语言?

选择编程语言学习时&#xff0c;除了就业因素外&#xff0c;还可以考虑以下几个方面来决定学习哪些编程语言&#xff1a; 个人兴趣与目标&#xff1a;如果你对某个特定领域感兴趣&#xff0c;比如游戏开发、数据分析、人工智能等&#xff0c;可以选择与该领域紧密相关的编程语言…

Python---【re库的使用】

目录&#xff1a; 一.re库简介 二.match方法 三.Match对象方法 四.使用search()方法进行匹配 五.使用findall()方法进行匹配 六.使用sub()方法替换字符串 七.使用split()方法分割字符串 一.re库简介 re库是Python用来实现“正则表达式”的库&#xff0c;并且re库在Pyth…

使用 nginx 服务器部署Vue项目

安装nginx 文本代理服务器 centos下载 注意需要root权限 在CentOS服务器上下载Nginx可以通过以下步骤完成&#xff1a; 更新系统软件包列表&#xff1a; yum update 安装EPEL存储库&#xff08;Extra Packages for Enterprise Linux&#xff09;&#xff1a; yum install…

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…

Visual Studio C++ 正确创建项目与更改文件名

1、创建项目 1&#xff09;打开Visual Studio&#xff0c;选择创建新项目。 2&#xff09;创建空项目 3&#xff09;配置新项目&#xff0c;注意不要勾选 " 将解决方案和项目放在同一目录中 " 。并将位置的文件夹设为与解决方案同名&#xff0c;方便管理。项目名称则…