Circuit Analysis in Classroom Learning
The article discusses methods for teaching circuit fault diagnosis in a classroom setting, focusing on modeling circuit components as edges and using a linked list to manage break points dynamically.
问题描述 在初中家庭电路的学习中,故障诊断是一个难点,其中,有这样一个场景,导线某个位置断了,要让学生判断故障原因,并找出断路的位置。 电路的计算中,我们把导线抽象成了一个边,只能整体设置是否断路,不支持设置断路的位置。在家庭电路中,我们把火线、地线、零线看做接线柱,因为火线、地线、零线要连接导线,只有接线柱可以连接导线。接线柱不可能设置断路。 方法1 由于火线、地线、零线功能是一样的,所以我们只考虑火线。 设置断路的小红点,我们成为"断路工具"。 为了方便,我们将导线上的坐标归一化一下,左端为0,右端为1。 · 在设置断路位置的时候,我们记录下断路位置的坐标。 · 同理,在连接导线的时候,我们记录下导线接线柱的位置。 · 将连接到火线上的接线柱或断路工具按坐标从小到大的顺序进行排序。 · 设一个变量isBreak,默认为false,遍历火线上连接的元件,如果是导线接线柱,将导线是否断路设为isBreak的值如果是断路工具,将isBreak设为true。 分析 我们把火线上的断路,转化成了连接的导线的断路。 优点:实现简单,不用改变原来的模型。 缺点:有BUG。很容易找到一个反例。比如下面这种连接方式。 方法2 想偷点懒还是不行,还是要老老实实按实际情况来。 分析 最初状态,火线相当于一条边。 设置一处断路,1条边会变成3条边。 连接一个导线,1条边会变成2条边。 在连接,断开的时候,要不断的动态创建销毁边。用户可以任意连接,最终会是一个复杂的网状结构。 如果我们只考虑设置断路,不考虑连接导线,就是一个链状结构了。实现起来就要简单很多。 对于导线,我们可以结合方法1,动态的设置导线的连接位置(导线的连接不增加边的个数)。如下图。火线被连接的导线分成了两部分,但是由于被分割的两部分都是通路,所以和将导线直接连接到火线的右侧(左侧也一样)是等效的。(我们忽略火线的电阻影响) 解决 我们使用双向链表来实现断路设置功能(数据结构太有用了)。实现细节就不再赘述了。 导线连接到火线时,根据坐标计算出导线应该连接的接线柱。 断路位置改变时,刷新火线上连接的导线的连接位置。 效果 总结 初看挺复杂,认真分析一下,实现起来也不是很困难。 最终使用的还是很熟悉的数据结构-双向链表。 结合我们学过的物理知识,我们将问题做了一些简化,在很大程度上降低了问题的复杂度。
New Oriental Technology
Practical internet development experience, tech sharing, knowledge consolidation, and forward-thinking insights.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.