|
作者:微信文章
下面是DeepSeek生成的Scratch AI立方体模型,有两个语法错误已注明。可以看到,DeepSeek对Scratch还是有一定的了解,提供的编码思路和基本实现都没有问题;两个语法错误表明对Scratch的克隆功能缺乏真实案例积累,需要增加针对内容的训练。
提问:Scratch模拟一个三维立方体,可以通过上下左右键控制这个立方体移动
deepseek:
在Scratch中模拟一个三维立方体并实现通过上下左右键控制移动是一个有趣的挑战。由于Scratch本身是2D的,我们需要通过一些技巧来模拟3D效果。以下是实现步骤:
1. 设计立方体
立方体由8个顶点和12条边组成。
在Scratch中,我们可以用“点”角色来表示顶点,用“画笔”工具绘制边。
2. 创建角色
顶点:创建一个角色(例如一个小圆点),并克隆8个实例来表示立方体的8个顶点。
画笔:使用Scratch的画笔工具来绘制立方体的边。
3. 初始化立方体
定义立方体的8个顶点在3D空间中的坐标(x, y, z)。
将这些3D坐标转换为2D坐标(透视投影)。
4. 透视投影
将3D坐标转换为2D坐标,模拟透视效果。
透视投影公式:
scale = d / (d + z)
x_2d = x * scale
y_2d = y * scale
其中:
(x, y, z) 是3D坐标。
d 是视点到屏幕的距离(可以设为固定值,例如200)。
(x_2d, y_2d) 是转换后的2D坐标。
5. 控制立方体移动
使用上下左右键控制立方体在3D空间中的移动。
左/右键:控制x轴移动。
上/下键:控制y轴移动。
其他键(可选):控制z轴移动。
6. 实现步骤
初始化
当绿旗被点击
删除 [全部 v] 的画笔
清空
将 [d v] 设为 [200] // 视点距离
将 [x v] 设为 [-50, 50, 50, -50, -50, 50, 50, -50] // 立方体顶点x坐标
将 [y v] 设为 [50, 50, -50, -50, 50, 50, -50, -50] // 立方体顶点y坐标
将 [z v] 设为 [50, 50, 50, 50, -50, -50, -50, -50] // 立方体顶点z坐标
重复执行 (8) 次
克隆 [自己 v]
透视投影
当作为克隆体启动时
将 [i v] 设为 [1]
重复执行
将 [scale v] 设为 ((d) / ((d) + (z 的第 (i) 项)))
将 [x_2d v] 设为 ((x 的第 (i) 项) * (scale))
将 [y_2d v] 设为 ((y 的第 (i) 项) * (scale))
移到 x: (x_2d) y: (y_2d)
将 [i v] 增加 (1)
等待直到 <(i) > (8)>
注:这里变量i应该是克隆体的编号,AI给出的设置方法是错误的。在scratch中,克隆体编号需要用私有变量在“克隆”动作之前设置。
绘制边
当绿旗被点击
重复执行
清空
落笔
移到 x: (x_2d 的第 (1) 项) y: (y_2d 的第 (1) 项)
移到 x: (x_2d 的第 (2) 项) y: (y_2d 的第 (2) 项)
移到 x: (x_2d 的第 (3) 项) y: (y_2d 的第 (3) 项)
移到 x: (x_2d 的第 (4) 项) y: (y_2d 的第 (4) 项)
移到 x: (x_2d 的第 (1) 项) y: (y_2d 的第 (1) 项)
移到 x: (x_2d 的第 (5) 项) y: (y_2d 的第 (5) 项)
移到 x: (x_2d 的第 (6) 项) y: (y_2d 的第 (6) 项)
移到 x: (x_2d 的第 (7) 项) y: (y_2d 的第 (7) 项)
移到 x: (x_2d 的第 (8) 项) y: (y_2d 的第 (8) 项)
移到 x: (x_2d 的第 (5) 项) y: (y_2d 的第 (5) 项)
移到 x: (x_2d 的第 (6) 项) y: (y_2d 的第 (6) 项)
移到 x: (x_2d 的第 (2) 项) y: (y_2d 的第 (2) 项)
移到 x: (x_2d 的第 (3) 项) y: (y_2d 的第 (3) 项)
移到 x: (x_2d 的第 (7) 项) y: (y_2d 的第 (7) 项)
移到 x: (x_2d 的第 (4) 项) y: (y_2d 的第 (4) 项)
移到 x: (x_2d 的第 (8) 项) y: (y_2d 的第 (8) 项)
抬笔
控制移动
当绿旗被点击
重复执行
如果 <按键 [左箭头 v] 是否按下?> 那么
将 [x v] 增加 (-10)
如果 <按键 [右箭头 v] 是否按下?> 那么
将 [x v] 增加 (10)
如果 <按键 [上箭头 v] 是否按下?> 那么
将 [y v] 增加 (10)
如果 <按键 [下箭头 v] 是否按下?> 那么
将 [y v] 增加 (-10)
等待 (0.1) 秒
注:这里的“当绿旗被点击”用法有误,应该是“当按下...键”,因为“当绿旗被点击”下的程序只对本体有效,克隆体不会执行。
7. 优化
可以添加旋转功能,让立方体绕x、y、z轴旋转。
使用变量控制旋转角度,并通过三角函数计算旋转后的坐标。
示例效果
通过以上步骤,你可以在Scratch中模拟一个简单的3D立方体,并通过上下左右键控制其移动。虽然Scratch是2D的,但通过透视投影和数学计算,我们可以实现基本的3D效果。
Scratch实现:
![](https://mmbiz.qpic.cn/mmbiz_png/kgaWAJiat2L2GVeoct8d3gUM0B3KSiaH9slwSKI56fkibr6ciakUG8AHye9vIXmMpIiaJBMtw6suH7iakSRDsSzgMZ9Q/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp)
相关阅读
Patch老师的编程工作坊
软件、硬件编程:该学哪个?
孩子为什么要学编程?
AI可以编程了,我们还要学编程吗?
Bret Victor: 编程的未来
{关于编程你想知道的那些事}
![](https://mmbiz.qpic.cn/mmbiz_png/kgaWAJiat2L0ajEj2SMFWUz70ibIcLPUVk3fGm5nI9vdRI0miaE5gx4pK66vtr0GwkzRx0DKu7t4ypibO9cCWZIggQ/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp) |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|