背景需求:
视觉训练的神奇效果,让你的宝贝成为焦点 - 小红书魔法视觉追踪-视觉训练—— 🔍视觉训练🔍 🔹想要提高宝宝的专注力,视觉训练是个绝佳方法! 🔹让宝宝仔细观察数字的路线,锻炼他们的视觉敏感度。 🔹在空白处填写数字,可根据线条的方向按顺序填写。 💡注意事项:引导宝宝一步一步进行,不要急于求成哦。 🔍视觉追踪能力🔍 🔹想让宝宝的视觉追踪能力更强?这里有个小技巧! 🔹让宝宝追踪图中数字的线条,提高他们的追踪能力。 🔹练习后,宝宝将变得更加敏锐,追踪能力也会有长足进步哦。 💡注意事项:适当调整难度,让宝宝充分体验追踪的乐趣。 🔍视觉线性空间感🔍 🔹想要培养宝宝的视觉线性空间感?这里有个妙招! 🔹让宝宝仔细观察数字的线条,理解线性空间感的变化。 🔹帮助宝宝感知线条的长度、方向和位置,提升他们的空间感知能力。 💡注意事项:让宝宝在放松愉快的状态下进行训练。 🎉快来试试这些训练方法吧!让宝宝的专注力更上一层楼!🎉 #儿童教育 #视觉训练 #数字敏感度 #视觉追踪能力 #线性空间感#不懂就问有问必答 #右脑开发 #注意力训练 #提高孩子学习的专注力 #孩子注意力不集中 #早期教育 #幼儿早教 #启蒙 #益智早教 #早教日常 #素材组 #专注力 #家庭教育 #儿童专注力训练 #游戏日常https://www.xiaohongshu.com/discovery/item/661642dd000000001a01101d?secondshare=weixin&share_from_user_hidden=true&appuid=&apptime=1716809845
模仿以上样式制作10*10宫格的圆圈,随机生成一根线贯通所有的圆圈。并根据路线生成1-100的数字,随机空缺N个。
'''
目标:圆点百数图,线路随机
作者:AI对话大师 阿夏
日期:2024年5月29日
# 的代码基本上是正确的,我只进行了一些微小的调整。现在,无论S是奇数还是偶数,都可以成功生成图像。如果S是奇数,将会生成斜线路径,如果S是偶数,将会生成直线路径。请注意,由于路径的生成是随机的,每次运行代码,生成的路径都可能有所不同。
'''
import random
from PIL import Image, ImageDraw, ImageFont
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\圆点百数图'
image_folder = path + r'\jpg'
max_attempts = 1000 # 最大尝试次数
for xx in range(10):
s = 4
k = int(s * s * 50 / 100) + 1
number_list = list(range(1, s * s + 1))
random_numbers = random.sample(number_list, k)
result = [str('' if i + 1 in random_numbers else i + 1) for i in range(s * s)]
width = 2100
height = 2100
image = Image.new('RGB', (width, height), color=(255, 255, 255))
draw = ImageDraw.Draw(image)
wide = 10
# 如果宫格等于7-10,就150,否则就是200
if s==6:
dot_size = 200
if s==5:
dot_size = 250
if s==4:
dot_size =300
if s==3:
dot_size =350
if s==2:
dot_size =350
else:
dot_size = 150
margin = 20
dot_padding = int((width - 2 * margin - dot_size * s) / s)
canvas_width = width - 2 * margin
canvas_height = height - 2 * margin
matrix_width = s * dot_size + (s - 1) * dot_padding
matrix_height = s * dot_size + (s - 1) * dot_padding
start_x = margin + (canvas_width - matrix_width) // 2
start_y = margin + (canvas_height - matrix_height) // 2
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
attempts = 0 # 当前尝试次数
success = False # 是否成功生成图像
while attempts < max_attempts:
start_point = (random.randint(0, s - 1), random.randint(0, s - 1))
current_point = start_point
visited_points = set([start_point])
path = [start_point]
def dfs():
global current_point
global visited_points
global path
if len(visited_points) == s * s:
return True
for direction in directions:
neighbor_x = current_point[0] + direction[0]
neighbor_y = current_point[1] + direction[1]
neighbor = (neighbor_x, neighbor_y)
if neighbor in visited_points:
continue
if 0 <= neighbor_x < s and 0 <= neighbor_y < s:
visited_points.add(neighbor)
path.append(neighbor)
current_point = neighbor
if dfs():
return True
visited_points.remove(neighbor)
path.pop()
current_point = path[-1]
return False
if dfs():
success = True
break
attempts += 1
if success:
font = ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc', 100)
for i in range(len(path) - 1):
if i < len(result) - 1:
center_x1 = start_x + path[i][1] * (dot_size + dot_padding) + dot_size // 2
center_y1 = start_y + path[i][0] * (dot_size + dot_padding) + dot_size // 2
center_x2 = start_x + path[i + 1][1] * (dot_size + dot_padding) + dot_size // 2
center_y2 = start_y + path[i + 1][0] * (dot_size + dot_padding) + dot_size // 2
draw.line([(center_x1, center_y1), (center_x2, center_y2)], fill=(0, 0, 0), width=wide)
for i in range(s):
for j in range(s):
center_x = start_x + j * (dot_size + dot_padding) + dot_size // 2
center_y = start_y + i * (dot_size + dot_padding) + dot_size // 2
draw.ellipse(
[
(center_x - dot_size // 2, center_y - dot_size // 2),
(center_x + dot_size // 2, center_y + dot_size // 2),
],
fill=(255, 255, 255),
outline=(0, 0, 0),
width=wide,
)
# 给所有起始点添加数字1-35
for i in range(len(result) - 1):
center_x1 = start_x + path[i][1] * (dot_size + dot_padding) + dot_size // 2
center_y1 = start_y + path[i][0] * (dot_size + dot_padding) + dot_size // 2
center_x2 = start_x + path[i + 1][1] * (dot_size + dot_padding) + dot_size // 2
center_y2 = start_y + path[i + 1][0] * (dot_size + dot_padding) + dot_size // 2
number = result[i]
text_width, text_height = draw.textsize(str(number), font=font)
text_x = center_x1 - text_width // 2
text_y = center_y1 - text_height // 2
draw.text((text_x, text_y), str(number), font=font, fill=(0, 0, 0))
# 给最后一个圆点坐标添加数字 36
if len(result) == s * s:
last_x = start_x + path[-1][1] * (dot_size + dot_padding) + dot_size // 2
last_y = start_y + path[-1][0] * (dot_size + dot_padding) + dot_size // 2
draw.ellipse(
[
(last_x - dot_size // 2, last_y - dot_size // 2),
(last_x + dot_size // 2, last_y + dot_size // 2),
],
fill=(255, 255, 255),
outline=(0, 0, 0),
width=wide,
)
text_width, text_height = draw.textsize(result[-1], font=font)
text_x = last_x - text_width // 2
text_y = last_y - text_height // 2
draw.text((text_x, text_y), result[-1], font=font, fill=(0, 0, 0))
image_path = image_folder + fr'\{xx:03d}.png'
image.save(image_path)
else:
print(f'无法生成图像:s={s}')
结果:
一、s=2-6可以按照指定数量生成。
其中双数的线条是水平垂直,单数线条是水平垂直还有部分倾斜
10次里面6次生成失败(出现倾斜线条),4次生成顺利