Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2703|回复: 3

溪溪python-儿童python

[复制链接]

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2023-11-26 15:23:51 | 显示全部楼层 |阅读模式
  1. import cv2
  2. import numpy as np

  3. newImageInfo=(800,800,3) #定义图片的宽高信息
  4. dst=np.zeros(newImageInfo,np.uint8)

  5. cv2.line(dst,(200,100),(300,200),(0,255,255))
  6. cv2.line(dst,(300,200),(300,400),(0,255,255))
  7. cv2.line(dst,(300,400),(100,400),(0,255,255))
  8. cv2.line(dst,(100,200),(100,400),(0,255,255))
  9. cv2.line(dst,(100,200),(200,100),(0,255,255))


  10. cv2.circle(dst,(40,30),10,(0,255,255))
  11. cv2.line(dst,(40,40),(40,60),(0,255,255))
  12. cv2.line(dst,(40,60),(30,80),(0,255,255))
  13. cv2.line(dst,(40,60),(50,80),(0,255,255))
  14. cv2.line(dst,(40,40),(20,50),(0,255,255))
  15. cv2.line(dst,(40,40),(60,50),(0,255,255))
  16. cv2.line(dst,(30,30),(20,40),(0,255,255))
  17. cv2.line(dst,(50,30),(60,40),(0,255,255))


  18. cv2.imshow('dst',dst)#展示绘制结果
复制代码
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
 楼主| 发表于 2024-2-8 09:32:47 | 显示全部楼层
  1. import cv2
  2. import numpy as np

  3. newImageInfo=(800,800,3) #定义图片的宽高信息
  4. dst=np.zeros(newImageInfo,np.uint8)
  5. for i in range(10):
  6.     for j in range(10):
  7.         cv2.rectangle(dst, (100+i*50, 100+j*50), (150+i*50, 150+j*50),
  8.                   (255, 255, 255), 1)
  9. rands = np.random.randint(low=-2, high=4, size=(2))

  10. print(rands)
  11. points = [[3,5],[4,5],[5,5],[6,5],[4,4],[6,4],[4,6],[6,6]]
  12. for i in range(len(points)):
  13.     points[i] =  points[i]+ rands
  14. print(points)
  15. for p in points:
  16.     cv2.rectangle(dst, (100+p[0]*50, 100+p[1]*50), (150+p[0]*50, 150+p[1]*50),
  17.                   (100, 100, 255), -1)


  18. cv2.imshow('dst',dst)#展示绘制结果
复制代码
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
 楼主| 发表于 2024-6-23 16:30:23 | 显示全部楼层
显示方块三视图
  1. import numpy as np  
  2. import random
  3. import cv2
  4.   
  5. # 设置三维空间的大小  
  6. SIZE = 3  
  7.   
  8. # 初始化三维二值化矩阵  
  9. cubes = np.zeros((SIZE, SIZE, SIZE), dtype=int)  
  10.   
  11. # 重力检测函数,让没有支撑的立方体下落  
  12. def apply_gravity(cubes):  
  13.     for x in range(SIZE):  
  14.         for y in range(SIZE):  
  15.             for z in range(SIZE - 2, -1, -1):  # 从上到下检查
  16.                 print(z)
  17.                 if cubes[x, y, z] == 1:  # 如果有立方体
  18.                     z1 = z
  19.                     # 检查下方是否有支撑  
  20.                     if (z1 < SIZE - 1 and cubes[x, y, z + 1] == 0):  
  21.                         # 没有支撑,下落  
  22.                         while z1 < SIZE - 1 and cubes[x, y, z1 + 1] == 0:  
  23.                             z1 += 1  
  24.                         # 找到支撑点后,将立方体移动到那里  
  25.                         cubes[x, y, z1] = 1  
  26.                         cubes[x, y, z ] = 0  
  27.                     #break  # 当前位置处理完毕,跳出内层循环  
  28.   
  29. # 随机添加6个立方体  
  30. def add_random_cubes(cubes, num_cubes):  
  31.     for _ in range(num_cubes):  
  32.         x, y, z = random.randint(0, SIZE - 1), random.randint(0, SIZE - 1), random.randint(0, SIZE - 1)  # 初始z设为0,因为之后要下落  
  33.         while cubes[x, y, z] == 1:  # 如果当前位置有立方体,则重新选择位置  
  34.             x, y, z = random.randint(0, SIZE - 1), random.randint(0, SIZE - 1), random.randint(0, SIZE - 1)  
  35.         cubes[x, y, z] = 1  # 放置立方体  
  36.     apply_gravity(cubes)  # 应用重力模拟  
  37.   
  38. # 绘制视图函数  
  39. def draw_views(cubes):  
  40.     # 获取造型矩阵的高度、宽度和深度  
  41.     height, width, depth = len(cubes), len(cubes[0][0]), len(cubes[0])  
  42.       
  43.     # 初始化前视图、左视图和顶视图矩阵  
  44.     front_view = np.zeros([height,width], dtype=int)
  45.     left_view = np.zeros([height,depth], dtype=int)
  46.     top_view = np.zeros([width,depth], dtype=int)
  47.       
  48.     # 遍历每个积木  
  49.     for x in range(height):  
  50.         for y in range(width):  
  51.             for z in range(depth):  
  52.                 if cubes[x][y][z] == 1:  
  53.                     # 更新前视图  
  54.                     if front_view[y][z] == 0:  # 只记录最前面的积木  
  55.                         front_view[y][z] = 1  
  56.                     # 更新左视图  
  57.                     if left_view[x][z] == 0:  # 只记录最左边的积木  
  58.                         left_view[x][z] = 1  
  59.                     # 更新顶视图  
  60.                     top_view[y][x] = 1  # 顶视图记录所有积木的顶部,即不需要判断  
  61.       
  62.     return front_view, left_view, top_view  

  63. def draw(view):
  64.     # 获取造型矩阵的高度、宽度和深度  
  65.     height, width, depth = len(cubes), len(cubes[0][0]), len(cubes[0])  
  66.       
  67.     # 初始化前视图、左视图和顶视图矩阵  
  68.     front_view = np.zeros([height,width], dtype=int)
  69.     left_view = np.zeros([height,depth], dtype=int)
  70.     top_view = np.zeros([width,depth], dtype=int)

  71.     # 遍历每个积木  
  72.     for x in range(height):  
  73.         for y in range(width):  
  74.             for z in range(depth):  
  75.                 if cubes[x][y][z] == 1:
  76.                     drawOne(y,z,100,100);
  77.                     drawOne(x,z,400,100);
  78.                     drawOne(y,x,100,400);
  79.                
  80.    
  81. def drawOne(m,n,m_shift,n_shift):
  82.     cv2.rectangle(dst,(m*50+m_shift,n*50+n_shift),
  83.                   (m*50+50+m_shift,n*50+50+n_shift), (0, 255, 0), 1)

  84. # 主程序  
  85. if __name__ == "__main__":  
  86.     add_random_cubes(cubes, 6)
  87.     print(cubes)
  88.     front_view, left_view, top_view  = draw_views(cubes)
  89.     print(front_view)
  90.     print(left_view)
  91.     print(top_view)
  92.     newImageInfo=(800,800,3) #定义图片的宽高信息
  93.     dst=np.zeros(newImageInfo,np.uint8)
  94.     draw([]);
  95.     cv2.imshow('dst',dst)#展示绘制结果
  96.    

复制代码
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
 楼主| 发表于 2024-7-1 21:58:11 | 显示全部楼层
更新,背景白色,图片大小
  1. import numpy as np  
  2. import random
  3. import cv2
  4.   
  5. # 设置三维空间的大小  
  6. SIZE = 3  
  7.   
  8. # 初始化三维二值化矩阵  
  9. cubes = np.zeros((SIZE, SIZE, SIZE), dtype=int)  
  10.   
  11. # 重力检测函数,让没有支撑的立方体下落  
  12. def apply_gravity(cubes):  
  13.     for x in range(SIZE):  
  14.         for y in range(SIZE):  
  15.             for z in range(SIZE - 2, -1, -1):  # 从上到下检查
  16.                 print(z)
  17.                 if cubes[x, y, z] == 1:  # 如果有立方体
  18.                     z1 = z
  19.                     # 检查下方是否有支撑  
  20.                     if (z1 < SIZE - 1 and cubes[x, y, z + 1] == 0):  
  21.                         # 没有支撑,下落  
  22.                         while z1 < SIZE - 1 and cubes[x, y, z1 + 1] == 0:  
  23.                             z1 += 1  
  24.                         # 找到支撑点后,将立方体移动到那里  
  25.                         cubes[x, y, z1] = 1  
  26.                         cubes[x, y, z ] = 0  
  27.                     #break  # 当前位置处理完毕,跳出内层循环  
  28.   
  29. # 随机添加6个立方体  
  30. def add_random_cubes(cubes, num_cubes):  
  31.     for _ in range(num_cubes):  
  32.         x, y, z = random.randint(0, SIZE - 1), random.randint(0, SIZE - 1), random.randint(0, SIZE - 1)  # 初始z设为0,因为之后要下落  
  33.         while cubes[x, y, z] == 1:  # 如果当前位置有立方体,则重新选择位置  
  34.             x, y, z = random.randint(0, SIZE - 1), random.randint(0, SIZE - 1), random.randint(0, SIZE - 1)  
  35.         cubes[x, y, z] = 1  # 放置立方体  
  36.     apply_gravity(cubes)  # 应用重力模拟  
  37.   
  38. # 绘制视图函数  
  39. def draw_views(cubes):  
  40.     # 获取造型矩阵的高度、宽度和深度  
  41.     height, width, depth = len(cubes), len(cubes[0][0]), len(cubes[0])  
  42.       
  43.     # 初始化前视图、左视图和顶视图矩阵  
  44.     front_view = np.zeros([height,width], dtype=int)
  45.     left_view = np.zeros([height,depth], dtype=int)
  46.     top_view = np.zeros([width,depth], dtype=int)
  47.       
  48.     # 遍历每个积木  
  49.     for x in range(height):  
  50.         for y in range(width):  
  51.             for z in range(depth):  
  52.                 if cubes[x][y][z] == 1:  
  53.                     # 更新前视图  
  54.                     if front_view[y][z] == 0:  # 只记录最前面的积木  
  55.                         front_view[y][z] = 1  
  56.                     # 更新左视图  
  57.                     if left_view[x][z] == 0:  # 只记录最左边的积木  
  58.                         left_view[x][z] = 1  
  59.                     # 更新顶视图  
  60.                     top_view[y][x] = 1  # 顶视图记录所有积木的顶部,即不需要判断  
  61.       
  62.     return front_view, left_view, top_view  

  63. def draw(view):
  64.     # 获取造型矩阵的高度、宽度和深度  
  65.     height, width, depth = len(cubes), len(cubes[0][0]), len(cubes[0])  
  66.       
  67.     # 初始化前视图、左视图和顶视图矩阵  
  68.     front_view = np.zeros([height,width], dtype=int)
  69.     left_view = np.zeros([height,depth], dtype=int)
  70.     top_view = np.zeros([width,depth], dtype=int)

  71.     # 遍历每个积木  
  72.     for x in range(height):  
  73.         for y in range(width):  
  74.             for z in range(depth):  
  75.                 if cubes[x][y][z] == 1:
  76.                     drawOne(y,z,100,100);
  77.                     drawOne(x,z,400,100);
  78.                     drawOne(y,x,100,400);
  79.                
  80.    
  81. def drawOne(m,n,m_shift,n_shift):
  82.     cv2.rectangle(dst,(m*50+m_shift,n*50+n_shift),
  83.                   (m*50+50+m_shift,n*50+50+n_shift), (0, 0, 0), 1)

  84. # 主程序  
  85. if __name__ == "__main__":  
  86.     add_random_cubes(cubes, 6)
  87.     print(cubes)
  88.     front_view, left_view, top_view  = draw_views(cubes)
  89.     print(front_view)
  90.     print(left_view)
  91.     print(top_view)
  92.     newImageInfo=(700,700,3) #定义图片的宽高信息
  93.     dst=np.ones(newImageInfo,np.uint8)*255
  94.     cv2.rectangle(dst,(10,10),
  95.                   (690,690), (0, 0, 0), 1)
  96.     draw([]);
  97.     cv2.imshow('dst',dst)#展示绘制结果
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-6-8 06:49 , Processed in 0.037906 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表