如何引导学生对编程产生兴趣_一块布如何使学生对编程感兴趣

如何引导学生对编程产生兴趣

Mikael KristensonUnsplash拍摄的照片

当我在硕士课程期间开始教授本科C 编程时,我做了很多思考,就在几年前我还是一个学生坐在这些相同的班级时感觉如何。 我确信对于很多学生来说,那段时间对我来说是特征,这是一种总体感觉,即这不是“真正的”计算机编程。 课程中的所有输入和输出都是通过终端执行的,但我们当中有一半甚至从未见过使用过终端,因此我们当然不是定期从一个终端运行程序。 在消费类软件中,GUI占主导地位。 难怪我觉得我正在学习的计算机编程与我作为软件用户的经历有些矛盾吗?

当然,这种思路在我年轻的时候就显得有些天真,但是问题是一个有效的问题:当您的听众习惯于以图形方式与计算机交互时,您如何使他们感到被纯粹的学习所启发基于文本的I / O? 考虑到这一目标,我想为该班级制作一个演示,看起来很浮华,但需要大量的计算才能达到目的。 这样,我希望能够说服一群无私的本科生,他们是能够产生与他们最密切相关的那种计算机程序的绝大部分途径。

从一个方面来说,我很幸运,因为所讨论的课程是为工程师编程而设计的,其中包含有关数值方法的重要内容。 所有这些学生都刚刚学会了如何编写数值ODE求解器,它是大量物理模拟的核心。 物理模拟需要大量计算吗? 检查一下 它们会产生闪光和令人印象深刻的结果吗? 完全正确。 在这些学生的能力范围内写一个吗? 好吧,他们将能够以任何方式理解代码。

上述浮华的物理模拟结果令人印象深刻

我发现布料模拟在复杂性和眼镜之间达到了完美的平衡。 目前,这实际上是一个已解决的问题,一些实现产生了令人印象深刻的实际结果(请参见下文)。 因此,尽管这可能不是最具革命性的项目,但我知道问题已得到充分记录,并提供了大量支持材料,这对课堂演示很有帮助。 有些模型具有不同的复杂性,而较简单的模型很容易遵循,而看起来并不琐碎。

所选模型将布料视为通过弹簧连接的一组点质量。 这样做的好处是,可以用只需要高中物理知识的过程来解释它,并且有可能在不更改基础模型的情况下,如果需要的话,可以增加附加的动力学来提高准确性。

该超现实视频中的所有内容都是计算机生成的

因此,布料的核心实际上是一个粒子网格,每个粒子都通过弹簧与其8个直接邻居相连,如下所示:

您如何获得像这样的模型的动力? 如果我们在给定的时间点上拥有每个粒子的位置,我们可以假设很短时间后的位置大约就是这个位置加上瞬时速度乘以很短时间的时间。 恭喜,您已经了解了ODE求解器的工作原理。 但是要遵循这种方法,我们需要通过对作用在粒子上的力求和来估算每个粒子的速度。 我们除以质量,然后得出一个加速度,我们可以使用该加速度来获得速度的估计值。 牛顿第二定律有多好?

我们认为(至少)要作用在每个粒子上的力是一个重力,来自与之相连的8个弹簧的8个作用力。

如果我们想建模风或碰撞或其他任何东西,我们也可以添加它。 但从本质上讲,系统的演化涉及到每个时刻计算作用在每个顶点上的净力; 由此确定加速度矢量; 然后从中找到速度和位置向量。

重力很容易,在z方向上恒定为-9.8 m

弹簧有点棘手。 阻尼弹簧上的力既抵抗当前拉伸的力x ,又抵抗当前的瞬时速度v 。 因此,公式为:

F = -kx-cv

其中k和c是常数。

可视化作用在阻尼弹簧上的力

这里有些棘手,因为在这种情况下,速度是两个相邻粒子之间的相对速度。 无论如何,对每个邻居进行一次8次操作,然后对结果求和,以得出作用在粒子上的净力。

有了这些公式和这个模型,我就能进行一个不错的布料模拟。 实际上,我使用了一个稍微复杂一些的ODE求解器,称为Runge-Kutta求解器 ,它使模拟更加可靠,并且不易出现不稳定现象。 鉴于这是向学生教授的解算器,因此使用它是一个很好的学习机会。

为了输出,我只将结果数据打印到终端,一行打印到一个瞬间。 请记住,该程序的重​​点是强调计算本身的重要性,我认为它做得很好。 产生大量作为输出产生的数字需要付出很多努力,包括计算资源和设计程序时的脑力劳动。

但是,当然,如果我们可以从中生成漂亮的图片,我们应该这样做。 因此,通过编写一些补充脚本,我获取了求解器的输出,并使用pbrt渲染了一系列帧,并将其缝合成了视频。

很棒的东西。 事情就是这样,实际上不需要太多的后处理即可获得该结果。 我希望能够说服任何开始计算机科学之旅的学生,使他们掌握这样的东西。 渲染器不是制作该视频的重要部分,我们的程序是,因为没有它,就无法渲染任何东西。

顺便说一下,该模拟还远非完美:这里有许多方法可以使我们的模拟更加健壮,准确或通用。 我们可以检查布料的自相交,可以在模型中添加其他弹簧以防止在顶点处形成尖锐的边缘,可以对与固体物体的碰撞进行建模,或者添加诸如风的外力。 该代码在Github上全部公开; 随时克隆它并进行一些改进。

那么,这是怎么下来的呢? 好吧,我向学生展示了它,很多东西都给人留下了深刻的印象,这当然令人鼓舞和鼓舞,但这并不是我所有人都感兴趣的东西。因为成功的真正衡量标准是他们是否认为成功是否在其中他们有能力做到这一点,我希望他们能做到。

第一次学习编程时,您会感到所有项目只是“真实”程序的一小部分。 或没有任何意义的玩具示例。 因此,我认为让学生感到自己所教的东西实际上在某种程度上是相关的,变得越来越重要。 通过给他们一些示例,说明他们的代码如何适应更大的前景,我们使他们不仅能够继续从事该领域的研究,而且还可以开始从事编程工作,并可能使某些事情变得不可思议。

翻译自: https://hackernoon.com/how-a-piece-of-cloth-can-get-students-interested-in-programming-568f4aee6300

如何引导学生对编程产生兴趣

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值