这个软件截至昨天,应该当是一个小的阶段完成——可以初步实现直流电源、电阻构成的电路中各个网络节点的电压求解。起初觉得神秘,做过一遍发现背后的数学原理十分简单,只需要根据电路创建线性方程组,然后求解即可。
下一阶段知识难度估计会大幅度提升,为了迎接下一阶段的挑战,我想还是应该先把当前的工作重新整理、封装,确保现在的代码稳固。因而今天开始做代码的收敛工作。
首先是将之前遗留的若干问题要逐一解决掉,其中既有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、如果某线段两端有任意段悬空,则将这条线段标记为冗余线段,完成一次检测之后,将所有检测到的冗余线段删除掉(注意此时还要删除连带的可能的冗余网络节点、冗余网络节点存储器等)。
2、冗余线段的删除不是一次遍历就能全部删除干净的,要反复删除。一次删除之后,上一次不是冗余的线段可能成为新的冗余线段,所以经过反复删除,直至找不到冗余线段时,才认为删除干净,完成删除操作。
额外的,上面提到的“删除冗余线段要连带着删除可能的空网络、空网络管理器”,这时可能出现内存泄漏,为了观察方便,又调整了一下“调试输出窗口”内的信息,将分配内存块更明细的显示出来,方便观察是否有内存没有被释放或成为野指针,确保删除不多、不少。
今天代码写的快,其中可能存在诸多需要再夯实的地方,周末两天,用来收敛今天完成的代码吧。