'''
生成对应的三视图和干扰选项,4个答案顺序不固定,返回题目顺序值
'''
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import random
def draw_square(x_start, y_start, size):
'''
画一个正方形
'''
x = [x_start, x_start, x_start + size, x_start + size, x_start]
y = [y_start, y_start + size, y_start + size, y_start, y_start]
plt.plot(x, y,color='black',linewidth=5)
def draw_combination(squares):
if type(squares) == list:
'''
送入希望画的正方形的块数
:param squares: [2,3,4]
:return:
'''
x_start = 0
y_start = 0
size = 1
for count in squares:
for _ in range(count):
draw_square(x_start, y_start, size)
y_start += size
x_start += size
y_start = 0
plt.axis('equal')
else:
'''
画俯视图
'''
size = 1
for x in range(3):
for y in range(3):
if squares[x][y]:
draw_square(y,x,size)
plt.axis('equal')
def gen_block(blocks):
'''
分别生成正视图,侧视图和俯视图需要的块数
:param block1: [[0, 1, 2], [2, 3, 4], [1, 1, 0]]
:return: [2,3,4],[],[],[]
'''
zheng = [max(blocks[:,0]),max(blocks[:,1]),max(blocks[:,2])]
ce = [max(blocks[2]),max(blocks[1]),max(blocks[0])]
fu = blocks!=0
ganrao = np.random.randint(0,2,(3,3))
return zheng,ce,fu,ganrao
def draw(fig,view,i):
num = '14'+str(i)
ax = fig.add_subplot(eval(num))
draw_combination(view)
ax.set_xlim(-0.2, 3.3)
ax.set_ylim(-0.2, 3.3)
plt.xticks([])
plt.yticks([])
#ax1.axis('off')
ax.set_title(str(i),fontsize=32, fontweight='bold')
return ax
def answer(blocks,index):
fig = plt.figure(figsize=(16, 4),dpi=100) # 设置图形大小
# 立体图
#blocks = np.array([[0, 0, 0], [2, 3, 2], [1, 1, 0]])
blocks = np.array(blocks)
zheng,ce,fu,ganrao = gen_block(blocks)
# 打乱四个答案的顺序
numbers = [1, 2, 3, 4]
# 使用shuffle函数对列表进行乱序
random.shuffle(numbers)
ax1 = draw(fig,zheng,numbers[0])
ax2 = draw(fig, ce, numbers[1])
ax3 = draw(fig, fu, numbers[2])
ax4 = draw(fig, ganrao, numbers[3])
# 调整子图间距
plt.subplots_adjust(wspace=0.15)
plt.savefig(r'./answer/'+str(index)+'.png')
return fig,numbers
没有合适的资源?快使用搜索试试~ 我知道了~
实现三视图题目的自动生成
共4个文件
py:4个
需积分: 0 0 下载量 6 浏览量
2023-07-14
10:33:55
上传
评论
收藏 5KB ZIP 举报
温馨提示
## 环境 - numpy - matplotlib - random - pillow ## 文件结构 - main.py - 主文件 - 直接运行即可得到对应题目 - 目前参数对应的是生成3*3*3立方体的组合,其中块数为4~6块的组合 - 调用gen_figure(cube,index),生成立方体并保存在`picture`文件夹内 - three.py - 主文件调用文件,调用方法:`three.answer(pic_row,index)` - 生成对应的三视图和干扰选项,4个答案顺序不固定,将图片文件保存在`answer`文件夹中,并返回题目顺序值 - gen_question.py - 主文件调用函数,调用方法:`gen_question.merge(index,numbers)` - 将保存的立体图和对应的题目合并到一张图内,并随机生成对应正视图,俯视图,和侧视图的箭头 - 将文件保存在`merge/A`对应的是答案为A的题目,`merge/B`,`merge/C`,`merge/D`同理
资源推荐
资源详情
资源评论
收起资源包目录
three_view.zip (4个子文件)
three_view
row.py 1KB
picture
answer
main.py 2KB
gen_question.py 1KB
merge
C
B
A
D
three.py 3KB
共 4 条
- 1
资源评论
beixidong
- 粉丝: 29
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功