【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,去掉重复样式有几种?)

news2024/11/24 1:09:58

作品展示

背景需求:

之前的代码吗存在几个问题,最大的问题是不能生成“”长条黑边框””

【教学类-55-01】20240511图层顺序挑战(四格长条纸)(4*4)和“手工纸自制参考图”-CSDN博客文章浏览阅读485次,点赞27次,收藏8次。【教学类-55-01】20240511图层顺序挑战(四格长条纸)(4*4)和“手工纸自制参考图”https://blog.csdn.net/reasonsummer/article/details/138745119

一、4宫格7条颜色的不重复排列数量

14:45-14:57,13分钟生成了40320张图片不重复的排列方法

每张图3-4KB,

代码展示:

'''
图层重叠挑战(长矩形带黑框) (抽取7) 一共有40320个不重复
作者:AI对话大师,阿夏
时间:2024年5月12日
'''
from PIL import Image, ImageDraw
import os,random
import itertools

print('--------1、制作图片-----------')
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条'

folder_path = path + r'\jpg'
os.makedirs(folder_path, exist_ok=True)



     

colors = ['red', 'orange','Yellow', 'green',  'lightgreen', 'skyblue','blue','Pink',]


from PIL import Image, ImageDraw
import os

folder_path=r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\jpg'
# 创建画布
canvas_width = 800
canvas_height = 800
canvas_color = (255, 255, 255)  # 白色背景
line_color = (0, 0, 0)  # 黑色线条
line_width = 3
margin = 100  # 边距

canvas = Image.new('RGB', (canvas_width, canvas_height), canvas_color)
draw = ImageDraw.Draw(canvas)

# 计算单元格大小和绘制区域
num_rows = 4
num_cols = 4
cell_size = min((canvas_width - 2 * margin) // num_cols, (canvas_height - 2 * margin) // num_rows)
start_x = (canvas_width - cell_size * num_cols) // 2
start_y = (canvas_height - cell_size * num_rows) // 2

# 绘制第一行四个单元格的长度为红色的矩形,边框为10像素的黑色

# 绘制所有单元格的矩形
# 绘制所有单元格的矩形
# for row in range(num_rows):
#     for col in range(num_cols):
#         x1 = start_x + col * cell_size
#         y1 = start_y + row * cell_size
#         x2 = x1 + cell_size
#         y2 = y1 + cell_size
#         draw.rectangle([(x1, y1), (x2, y2)], fill='white', outline=line_color, width=line_width)

# 4行4列8条四格纸
#  第1行
def draw_h1_rectangle(start_x, start_y, cell_size, line_color, line_width):
    x1 = start_x
    y1 = start_y
    x2 = start_x + 4 * cell_size
    y2 = start_y + 1 * cell_size
    draw.rectangle([(x1, y1), (x2, y2)], fill=colors[0], outline=line_color, width=line_width)

#  第2行
def draw_h2_rectangle(start_x, start_y, cell_size, line_color, line_width):
    x1 = start_x
    y1 = start_y + 1 * cell_size
    x2 = start_x + 4 * cell_size
    y2 = start_y + 2 * cell_size
    draw.rectangle([(x1, y1), (x2, y2)], fill=colors[1], outline=line_color, width=line_width)

#  第3行
def draw_h3_rectangle(start_x, start_y, cell_size, line_color, line_width):
    x1 = start_x
    y1 = start_y + 2 * cell_size
    x2 = start_x + 4 * cell_size
    y2 = start_y + 3 * cell_size
    draw.rectangle([(x1, y1), (x2, y2)], fill=colors[2], outline=line_color, width=line_width)

#  第4行
def draw_h4_rectangle(start_x, start_y, cell_size, line_color, line_width):
    x1 = start_x
    y1 = start_y + 3 * cell_size
    x2 = start_x + 4 * cell_size
    y2 = start_y + 4 * cell_size
    draw.rectangle([(x1, y1), (x2, y2)], fill=colors[3], outline=line_color, width=line_width)

#  第1列
def draw_l1_rectangle(start_x, start_y, cell_size, line_color, line_width):
    x1 = start_x
    y1 = start_y
    x2 = start_x + 1 * cell_size
    y2 = start_y + 4 * cell_size
    draw.rectangle([(x1, y1), (x2, y2)], fill=colors[4], outline=line_color, width=line_width)

#  第2列
def draw_l2_rectangle(start_x, start_y, cell_size, line_color, line_width):
    x1 = start_x + 1 * cell_size
    y1 = start_y
    x2 = start_x + 2 * cell_size
    y2 = start_y + 4 * cell_size
    draw.rectangle([(x1, y1), (x2, y2)], fill=colors[5], outline=line_color, width=line_width)

#  第3列
def draw_l3_rectangle(start_x, start_y, cell_size, line_color, line_width):
    x1 = start_x + 2 * cell_size
    y1 = start_y
    x2 = start_x + 3 * cell_size
    y2 = start_y + 4 * cell_size
    draw.rectangle([(x1, y1), (x2, y2)], fill=colors[6], outline=line_color, width=line_width)

#  第4列
def draw_l4_rectangle(start_x, start_y, cell_size, line_color, line_width):
    x1 = start_x + 3 * cell_size
    y1 = start_y
    x2 = start_x + 4 * cell_size
    y2 = start_y + 4 * cell_size
    draw.rectangle([(x1, y1), (x2, y2)], fill=colors[7], outline=line_color, width=line_width)
    

#     # 将函数名称提取出来并放入列表
# function_names = ['draw_h1_rectangle','draw_h2_rectangle','draw_h3_rectangle','draw_h4_rectangle','draw_l1_rectangle','draw_l2_rectangle','draw_l3_rectangle','draw_l4_rectangle']
# # 生成所有可能的排列,是元祖()
# permutations = list(itertools.permutations(function_names))

# # 打印排列数量
# print(f"总共有 {len(permutations)} 种不同的排列。")
# # 40320 8的阶乘

import itertools

function_names = ['draw_h1_rectangle','draw_h2_rectangle','draw_h3_rectangle','draw_h4_rectangle','draw_l1_rectangle','draw_l2_rectangle','draw_l3_rectangle','draw_l4_rectangle']


# # 调用函数列表中的函数
# for draw_function in function_names:
#     draw_function(start_x, start_y, cell_size, line_color, line_width)




# # # 保存图片
# # image_path = os.path.join(folder_path, f'测试.jpg')
# # canvas.save(image_path)

# # print(f'图片已保存至:{image_path}')


import itertools

#
# 生成从 8 个元素中选取 7 个元素的所有可能排列,8个互相配对40320,7个互相配对也是40320
permutations = list(itertools.permutations(function_names, 7))
# print(permutations[0:10])

# 打印排列数量
print(f"总共有 {len(permutations)} 种不同的排列。")
# 总共有 40320 种不同的排列。

n=1
# 打印所有排列
for permutation in permutations:    # 因为有40万个,所以先测试前20个
    # print(permutation)
    
    # 将元组转换为函数对象列表
    functions = [eval(function_name) for function_name in permutation[::-1]]
    # # 打印函数对象列表,一长串文字
    print(functions)
    # [<function draw_triangle_2 at 0x000001A4B402F3A8>, <function draw_triangle_1 at 0x000001A4B402FB88>, <function draw_triangle_6 at 0x000001A4B4061288>, <function draw_triangle_3 at 0x000001A4B23C5AF8>, <function draw_triangle_4 at 0x000001A4B4061168>, <function draw_triangle_5 at 0x000001A4B40611F8>]

    # 运行一个7元素,就打乱一次颜色,确保color【0】抽取的颜色每次都不同
    
    # random.shuffle(colors)

    # 调用函数绘制等边三角形
    # 调用函数绘制矩形
    for func in functions:
        # 为每个函数添加缺失的参数
        func(start_x, start_y, cell_size, line_color, line_width)

        # 保存绘制好的图像
    canvas.save(folder_path + fr'\{n:05d}.png')
    n+=1

第二个问题是:去除重复的排列方式

以下是三天三夜漫长的测试(

筛选)

二、检测图片并删除的时间比生成40320张图片更长

15:00-16:40 足足等了100分钟 ,久到我以为程序中断了!

图片颜色检测:7色+黑白,删除后还有23040个不重复重叠方式

三、发现48张一组的图片样式相等

我发现前48张图片的样式是一样,前三行3色+第四行四个颜色,

第49张-97张(48张)都是一个样式:第1、2、4行分别一种颜色、第3行四种颜色。

最后48张样式,第一列4个颜色,第2、3、4一种颜色

计算器算了一下,发现可以整除,不同的样式有480种

也就是可以23040张做成48个一组,保留一张,其他删除。

import os

folder_path =r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\jpg'# 替换为实际的文件夹路径

# 获取文件夹中的所有文件名
file_names = os.listdir(folder_path)

# 将文件名与文件夹路径拼接
file_paths = [os.path.join(folder_path, file_name) for file_name in file_names]

# 将文件名与文件夹路径按照每组24个进行分组
grouped_file_paths = [file_paths[i:i+48] for i in range(0, len(file_paths), 48)]
print(len(grouped_file_paths))
# 480组

# 遍历每一组文件路径列表
for group in grouped_file_paths:
    # 保留每组中的第一个文件,删除后面的23个文件
    for file_path in group[1:]:
        os.remove(file_path)

print("删除操作已完成。")

以上方法看上去合理,但是筛选出来的480张图片还是有一样的重复(布局结构重复,但是色卡不一样)


三、放弃随机颜色,用单色来试试40320种图形到底是什么样的

100分钟后,终于再次活动23040个7色图案,看到有大量的相同的图案

检测图片是否相同,相同就删除第一张。

from PIL import Image
import os,time

def compare_images(image1_path, image2_path):
    # 打开两张图片
    image1 = Image.open(image1_path)
    image2 = Image.open(image2_path)

    # 比较图片尺寸
    if image1.size != image2.size:
        return False

    # 比较图片像素
    pixel1 = image1.load()
    pixel2 = image2.load()
    for x in range(image1.width):
        for y in range(image1.height):
            if pixel1[x, y] != pixel2[x, y]:
                return False

    return True

# 示例用法
image_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\一样'  # 替换为图片所在的文件夹路径

# 获取文件夹中的所有图片文件路径
image_files = [file for file in os.listdir(image_folder) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]

# 对每对图片进行比较,并删除第一张图片
for i in range(len(image_files)-1):
    image1_path = os.path.join(image_folder, image_files[i])
    for j in range(i+1, len(image_files)):
        image2_path = os.path.join(image_folder, image_files[j])
        if compare_images(image1_path, image2_path):
            # 删除第一张图片
            os.remove(image1_path)
            print(f"已删除图片:{image_files[i]}")
            break  # 找到相同的图片后就跳出循环,继续下一对图片的比较

print("删除操作已完成。")

删除完全相同的图片的第一张,保留第二张

从2024年5月12日22:00-2024年5月13日6:56分,终于把第一轮的256个(90)的文件夹内部图片筛选一遍,删除部分图片

5月13日6:56分,筛选到编号3.2万,实际是4.32张

5月13日7:00删除到30000万张时,电脑黑屏了,打开以后程序关闭了。

四、减少互相筛选的图片数量,提升检测数独

只能重新进行删除,这次我把40张图片做成一个文件夹,减少互相核对的数量,这样又576个文件夹

import os
import shutil

# 第一、2万张图片分开识别

# 原始文件夹路径
image_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\一样'

# 新建文件夹路径
new_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\整理'
os.makedirs(new_folder,exist_ok=True)


# 创建新建文件夹
os.makedirs(new_folder, exist_ok=True)

# 获取文件夹中的所有图片文件路径
image_files = [file for file in os.listdir(image_folder) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]

# 按照90个一组移动图片
group_size = 40
num_groups = len(image_files) // group_size + 1

for group in range(num_groups):
    start_index = group * group_size
    end_index = (group + 1) * group_size

    # 获取当前组的图片文件路径
    group_files = image_files[start_index:end_index]

    # 创建当前组的文件夹
    group_folder = os.path.join(new_folder, str(f'{group:03d}'))
    os.makedirs(group_folder, exist_ok=True)

    # 移动图片到当前组的文件夹
    for file in group_files:
        src_path = os.path.join(image_folder, file)
        dst_path = os.path.join(group_folder, file)
        shutil.copy(src_path, dst_path)

print("移动操作已完成。")


from PIL import Image
import os

def compare_images(image1_path, image2_path):
    # 打开两张图片
    image1 = Image.open(image1_path)
    image2 = Image.open(image2_path)

    # 比较图片尺寸
    if image1.size != image2.size:
        return False

    # 比较图片像素
    pixel1 = image1.load()
    pixel2 = image2.load()
    for x in range(image1.width):
        for y in range(image1.height):
            if pixel1[x, y] != pixel2[x, y]:
                return False

    return True

# # 文件夹路径

# # 第二:在258个文件里单独核对,第一遍去重

# folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\整理'

# # 获取所有子文件夹
# subfolders = [subfolder for subfolder in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, subfolder))]

# # 对每个子文件夹进行处理
# for subfolder in subfolders:
#     subfolder_path = os.path.join(folder_path, subfolder)

#     # 获取子文件夹中的所有图片文件路径
#     image_files = [file for file in os.listdir(subfolder_path) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]

#     # 对每对图片进行比较,并删除第一张图片
#     for i in range(len(image_files)-1):
#         image1_path = os.path.join(subfolder_path, image_files[i])
#         for j in range(i+1, len(image_files)):
#             image2_path = os.path.join(subfolder_path, image_files[j])
#             if compare_images(image1_path, image2_path):
#                 # 删除第一张图片
#                 os.remove(image1_path)
#                 print(f"已删除图片:{image_files[i]}")
#                 break  # 找到相同的图片后就跳出内层循环,继续下一对图片的比较

# print("删除操作已完成。")

生成文件夹后,再次用程序把相同图片删除

from PIL import Image
import os

def compare_images(image1_path, image2_path):
    # 打开两张图片
    image1 = Image.open(image1_path)
    image2 = Image.open(image2_path)

    # 比较图片尺寸
    if image1.size != image2.size:
        return False

    # 比较图片像素
    pixel1 = image1.load()
    pixel2 = image2.load()
    for x in range(image1.width):
        for y in range(image1.height):
            if pixel1[x, y] != pixel2[x, y]:
                return False

    return True

# 文件夹路径

folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\整理'

# 获取所有子文件夹
subfolders = [subfolder for subfolder in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, subfolder))]

# 对每个子文件夹进行处理
for subfolder in subfolders:
    subfolder_path = os.path.join(folder_path, subfolder)

    # 获取子文件夹中的所有图片文件路径
    image_files = [file for file in os.listdir(subfolder_path) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]

    # 对每对图片进行比较,并删除第一张图片
    for i in range(len(image_files)-1):
        image1_path = os.path.join(subfolder_path, image_files[i])
        for j in range(i+1, len(image_files)):
            image2_path = os.path.join(subfolder_path, image_files[j])
            if compare_images(image1_path, image2_path):
                # 删除第一张图片
                os.remove(image1_path)
                print(f"已删除图片:{image_files[i]}")
                break  # 找到相同的图片后就跳出内层循环,继续下一对图片的比较

print("删除操作已完成。")

从上午8::43一直运行到15:30分,8个小时完成过了第一遍的删除

把000-576文件夹里剩下的照片放回到“第一次筛选”的文件里。

import os
import shutil

# 整理文件夹路径
folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\整理'

# 目标文件夹路径
target_folder =r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\第一次筛选'
os.makedirs(target_folder,exist_ok=True)

# 创建目标文件夹
os.makedirs(target_folder, exist_ok=True)

# 遍历整理文件夹中的子文件夹
for subfolder in os.listdir(folder_path):
    subfolder_path = os.path.join(folder_path, subfolder)

    # 检查子文件夹是否是文件夹而不是文件
    if os.path.isdir(subfolder_path):
        # 遍历子文件夹中的图片文件
        for file in os.listdir(subfolder_path):
            file_path = os.path.join(subfolder_path, file)

            # 检查文件是否是图片文件
            if file.endswith(('.jpg', '.jpeg', '.png', '.gif')):
                # 移动图片文件到目标文件夹
                shutil.copy(file_path, target_folder)

print("移动操作已完成。")

第一次筛选后,出现了12224张张片。

因为是40张分割排除重复,所以再次合并后,还会有重复,

再次测试,做成12224/64=191,也就是64张一个文件夹,做191个文件夹,开始第二轮的去重

修改删除代码里面的路径。

64张互相对比,时间很长

16:07--19:37,此时整理到104/190号文件夹,我感觉速度很慢,想试试再减少每个文件夹的元素,看看是否可以识别快一点。

直接测试2张图之间的对比

把文件做成11005/5=2201个一组,看看筛选快不快

19:48——20:34看看5张5张对比删除需要多少时间?

19:53分,出现了第一张删除的图片

5分钟刷到166/2201,大概需要3*5=60分钟筛选完成。

汇总剩余数量

删除后,还有10928,再测试2张图 有5464个文件夹

两张两张对比是不是更快呢

20:46——20.56  10分钟

两张图片正好相同的概率比较低,估计也选不出图片,但是速度会块很多!

还真的找到了两张中的重复

再筛一次。

10926还是双数,继续除以2

5分钟筛一遍,的确没有重复的了

四张一组对比删除10926/3=3642

21:06——21:19

现在五个一组对比

10915/5=2183

21:24-21:50

10868除以4=2717

过程不再了,就是反复的删除

21:57——22:16

还剩10848

10848除以48=226

22:23——

慢慢等……

每次根据除数,把图片分到不同文件里,可以反复删除,但是数量不同。原则上10000个图片放在一起,一一检测,但是720个图片互相检测就用了1小时,我担心1万张直接把电脑干崩溃了。

…………

继续删除中

尽可能多排除一模一样的图片,便于最后一轮的几百张对比,时间更长

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

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

相关文章

黑盒测试中的边界值分析

黑盒测试是一种基于需求和规格的测试方法&#xff0c;它主要关注软件系统输出的正确性和完整性&#xff0c;而不考虑内部代码的实现方式。在黑盒测试中&#xff0c;边界值分析是一种重要的测试技术&#xff0c;它可以帮助测试人员有效地发现输入和输出的问题。本文将从什么是边…

nacos在没有指定数据源的情况下默认使用什么数据库?

在没有特别指定数据源的情况下&#xff0c;Nacos 默认使用内嵌的数据库 Derby 来存储其数据。Derby 是一个轻量级的、基于 Java 的数据库管理系统&#xff0c;适合于开发和测试环境&#xff0c;因为它简单易部署且无需额外的数据库服务器。然而&#xff0c;对于生产环境&#x…

JSP ssm 房屋中介管理myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP ssm 房屋中介管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采…

【C语言/数据结构】栈:从概念到两种存储结构的实现

目录 一、栈的概念 二、栈的两种实现方式 1.顺序表实现栈 2.链表实现栈 三、栈的顺序存储结构及其实现 1.栈的声明 2.栈的初始化 3.栈的销毁 4.栈的压栈 5.栈的弹栈 6.栈的判空 7.返回栈顶元素 8.返回栈的长度 四、栈的链式存储结构及其实现 1.栈的声明 2.栈的…

GBase 8s 数据库集群切换及恢复

GBase 8s 数据库切换分为自动切换、由CM控制的按FOC规则的切换、手工切换。 自动切换 全自动切换用于HAC集群中&#xff0c;由于集群只有两个节点&#xff0c;数据库相互之前进行状态检查&#xff0c;发现异常时&#xff0c;能按DRAUTO的配置方式进行自动切换。 在HAC集群中&…

ES扩缩容

ES扩容 1.1 页面扩容ES1 1.2 拷贝插件及ssl文件 JSON [ec_admin@kde-offline3 ~]$ sudo rsync -avP /usr/kde_ec/2.3.6.6-1/elasticsearch1/plugins/* kde-offline6:/usr/kde_ec/2.3.6.6-1/elasticsearch1/plugins/ ;echo $? [ec_admin@kde-offline3 ~]$ sudo rsync -avP /us…

SQL Server中怎么排查死锁问题

一、背景 我们在UAT环境压测的时候&#xff0c;遇到了如下的死锁异常。 Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 82) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Re…

Windows下安装Node.js、npm和electronic,并运行一个Hello, World!脚本程序

20240510 By wdhuag 目录 简介&#xff1a; 参考&#xff1a; 安装Node.js 安装npm 配置npm&#xff1a; 修改包存放目录和缓存目录 切换镜像源 使用 nrm 切换镜像源 安装Electron 运行一个Hello, World!脚本程序 安装Yarn JavaScript 指南 简介&#xff1a; Nod…

【Spring】GoF 之代理模式

一、代理模式 在 Java 程序中的代理模式的作用&#xff1a; 当一个对象需要受到保护的时候&#xff0c;可以考虑使用代理对象去完成某个行为 需要给某个对象的功能进行功能增强的时候&#xff0c;可以考虑找一个代理进行增强 A 对象无法和 B 对象直接交互时&#xff0c;也可以…

MySQL5.7压缩包安装图文教程

一、下载 https://dev.mysql.com/downloads/mysql/ 选择5.7版本 二、解压 下载完成后解压&#xff0c;解压后如下&#xff08;zip是免安装的&#xff0c;解压后配置成功即可使用&#xff09; 注意&#xff1a;只有5.6以前的版本才有在线安装&#xff08;install msi&#xf…

徐孝雅:一位清华毕业温州人的科技报国之路

图 徐孝雅 偶然的一次聚会,朋友讲述一位科技企业家的传奇故事,出于记者的敏感,我对这位企业家产生了好奇。 2024年4月,我们如约见到这位企业家,他叫徐孝雅。他给我的印象极其深刻,中等身材,儒雅大方,气度不凡,眼神展露坚定和自信,浑身散发神采和活力。寒暄之后,似乎一见如故…

armbian 安装libreoffice 转换word为PDF

安装libreoffice sudo apt-get install libreoffice安装JVM sudo apt-get install default-jre #验证 java -version尝试转换&#xff1a; libreoffice --convert-to pdf /root/printFiles/f.docx发现问题乱码 从Windows 拷贝字体到debian上&#xff0c;windows字体路径是&a…

第十二讲:指针(4)

第十二讲&#xff1a;指针&#xff08;4&#xff09; 1.回调函数1.1什么是回调函数1.2深入理解并使用回调函数1.2.1简单写法1.2.2优化 2.qsort函数详解2.1函数简单介绍2.3qsort函数使用举例2.3.1qsort函数排序整形数据2.3.2qsort函数排序结构数据 3.qsort函数的模拟实现3.1冒泡…

网络实验新境界,PNETLab模拟器部署指南

在网络工程领域&#xff0c;拥有一个可靠的网络实验平台至关重要。PNETLab模拟器是一款功能强大的网络仿真工具&#xff0c;它支持包括华为、华三、锐捷、思科在内的多种设备&#xff0c;并且以开源免费的形式提供&#xff0c;这使得它在业界备受青睐。 软件介绍 PNETLab&am…

ThingsBoard版本控制配合Gitee实现版本控制

1、概述 2、架构 3、导出设置 4、仓库 5、同步策略 6、扩展 7、案例 7.1、首先需要在Giitee上创建对应同步到仓库地址 ​7.2、giit仓库只能在租户层面进行配置 7.3、 配置完成后&#xff1a;检查访问权限。显示已成功验证仓库访问&#xff01;表示配置成功 7.4、添加设…

【代码随想录】【动态规划】背包问题 - 完全背包

完全背包 模板&#xff1a;完全背包问题 问题描述 完全背包问题与01背包问题唯一的区别在于&#xff1a; 在01背包中&#xff1a;每个物品只有一个&#xff0c;要么放入背包&#xff0c;要么不放入背包在完全背包中&#xff1a;每个物品有无限多个&#xff0c;可以不放入背…

使用Eigen将经纬度、高程、偏北角转成变换矩阵

目录 1、前言 2、示例 3、代码解析 4、垂直于给定点的切平面变换 5、代码解析 1、前言 在地球表面进行刚体变换时候&#xff0c;要将具有经纬度、高程和偏北角的坐标信息转换为变换矩阵表达&#xff0c;首先需要了解坐标系之间的转换关系。 通常&#xff0c;我们会将经纬…

C++进阶:哈希(1)

目录 1. 简介unordered_set与unordered_map2. 哈希表&#xff08;散列&#xff09;2.1 哈希表的引入2.2 闭散列的除留余数法2.2.1 前置知识补充与描述2.2.2 闭散列哈希表实现 2.3 开散列的哈希桶2.3.1 结构描述2.3.2 开散列哈希桶实现2.3.3 哈希桶的迭代器与key值处理仿函数 3.…

第五届电子通讯与人工智能学术会议(ICECAI 2024, 5/31-6/2)

目录 1. 会议官方2. 会议新闻中华人民共和国教育部新闻 3. 出版历史4. 大会简介5. 主办单位与嘉宾主办单位承办单位主讲嘉宾组委会 6. 征稿主题7. 论文出版8. 参会说明 1. 会议官方 2024 5th International Conference on Electronic communication and Artificial Intelligenc…

2024年抖店什么类目赚钱?这八个类目最赚钱,想开店的快来瞅瞅!

哈喽~我是电商月月 做抖音小店的商家都知道&#xff0c;选品是非常重要的 那什么样的商品类型赚钱&#xff0c;哪些商品又适合新手操作呢? 今天我就给大家推荐几个热销类目&#xff0c;特别是最后两个&#xff0c;下半年说不定会小爆一把哦 一&#xff0e;日用百货 这个类…