Simple Nano Circuit 开发日记(32)

这个软件截至昨天,应该当是一个小的阶段完成——可以初步实现直流电源、电阻构成的电路中各个网络节点的电压求解。起初觉得神秘,做过一遍发现背后的数学原理十分简单,只需要根据电路创建线性方程组,然后求解即可。 下一阶段知识难度估计会大幅度提升,为了迎接下一阶段的挑战,我想还是应该先把当前的工作重新整理、封装,确保现在的代码稳固。因而今天开始做代码的收敛工作。 首先是将之前遗留的若干问题要逐一解决掉,其中既有bug,也有功能的缺失。今天主要完成了以下工作: 1、线性方程组构建中存在一个缺陷,引发了在开路时的电压计算错误,这是方程组中的节点方程构建时,没有考虑到悬空引脚导致的; 2、对代码中若干冗余的方法进行清理; 3、对代码中若干传值的地方进行调整,改成传递引用; 除此之外,还有一些功能上的缺失也要在接下来几天逐一完成: 1、对已放置的IC进行删除、移动等操作; 2、对已放置的IC进行选取,通过弹窗对它们的属性值进行调整。 如上工作全部完成之后,便可以将“交流电源”引入进来,从而产生“时间”的概念,为后续增加非线性元件打下初步基础。 Update 2024.12.28 Day: 33 SLOC: 5012 下午到了家乐福,晚上吃的牛肉面。吃牛肉面之前的一段时间: 1、完成了弹窗修改 电阻 和 直流电源电压 的功能; 2、完成了这个弹窗机制的通用化,也就是说所有的IC,都从基类定义是否可以弹窗,如果可以弹窗,就在IC自己的类内实现弹窗风格和窗口内容设置; 然后下楼吃牛肉面,去的路上想明白了线路中的电流是怎么计算的,没有偷懒的途径,必须对线段进行分割,才能实现电流的分段计算。所以吃完牛肉面回来,开始着手进行线路分割操作。 分割线路的整体思想很简单:落PIN时,判断落PIN是否压中了线段,如果压中线段则对已压中的线段按PIN进行切割;画线时,则是判断线段是否穿越了PINs,如果穿越了PINs,就一次找到每一个PIN同样以PIN为分割点、对线段进行分割。 完成这个功能之后,又进行了一下“清理电路中冗余线段”的功能实现。 1、如果某线段两端有任意段悬空,则将这条线段标记为冗余线段,完成一次检测之后,将所有检测到的冗余线段删除掉(注意此时还要删除连带的可能的冗余网络节点、冗余网络节点存储器等)。…