迷惑行为:用最烦人的方式计算加法
algodoo吧
全部回复
仅看楼主
level 11
◆Tron◆ 楼主
首先:
按照逻辑电路的思路做这个东西只是为了好玩。
如果你真的想做计算器,就做一个用齿轮进位的吧。由于Algodoo严重的物体穿透问题,这个用了大量活塞与弹簧的东西随时会因为拖曳工具手抖了一下螺旋升天。
那么就用这个筒子来规定0与1。
右移0.25m(一格)以上为1
2020年02月08日 12点02分 1
level 11
◆Tron◆ 楼主
那就先把逻辑门做出来好了
最简单的或门
活动部件少,可靠性也是最好的。至少不会像与门和非门那样物体穿透之后彻底失效。
另一个好处是不会损失位移。否则隔一段距离还要用连杆放大一下,就更烦了。
2020年02月08日 12点02分 2
level 11
◆Tron◆ 楼主
非门。可靠性中等。只要不大力出奇迹一般不会坏。
然而后来发现右侧有哪根弹簧力度调的太大会把非门强行怼回来[喷]只能加以改造。
用一块无限摩擦力的三角形卡住输出端。理论上摩擦力够产生自锁就行,但Algodoo在这一点上似乎有些魔法……
2020年02月08日 13点02分 3
level 11
◆Tron◆ 楼主
然后是毒瘤与门。
这个复杂的东西运转的时候很好看,但可靠性有多差也可想而知。
更恶心的是由于两个输入端被中间的滑块连接上了,虽然示意图里没什么问题,但实际运行时与门会发生一个输入带动另一个的情况。一个门还好,多了之后误差会累积出一堆错误。
比如,一楼的那个看起来还不错的东西,用逻辑门拼出来之后拆掉了将近一半的弹簧才勉强能用。
2020年02月08日 14点02分 4
持续关注
2020年02月09日 03点02分
level 11
◆Tron◆ 楼主
另一种靠斜面的与门还能好一些。
物体数还少了一些,我也不知道是怎么省出来的。
接下来就是半加器的核心,异或门。它的输入输出是这样的关系。
和二进制的运算很符合。
1 + 0 = 1; 0 + 1 = 1; 0 + 0 = 0; 1 + 1 = 10 (末位也是0)
异或门也许也可以直接用机械实现,但它有更简单的方法——用已有的三种逻辑门拼出来。
去掉了壳子就是这样
但是即使你叫“半加器”,也不能让1+1和0+0的输出完全相同吧?
于是,在第一个与门上加了个杆子,在两个输入都为1的情况下,它会输出1来和0+0区分
“这不就是进位吗?”它还真叫进位(Carry),而上面的就是和(Sum)了。
2020年02月09日 11点02分 5
level 11
◆Tron◆ 楼主
这是一位的二进制运算,如果想做更多位的,这个进位的输出就得在下一位找个地方进去。
半加器满足不了它,两个输入已经被加数占用了。幸好这些东西可以继续拼。
两个半加器一个或门拼出来的全加器。
逻辑门靠得太近中间有同一碰撞作用层的滑块撞上了,导致de了半天bug[喷]
现在只需要把它一层层的堆起来,就可以尽情扩大运算位数了
直到CPU受不了你继续折腾
2020年02月09日 11点02分 6
level 11
◆Tron◆ 楼主
看来我的Algodoo不太接受这种滥用机械的行为。
堆到第三层的时候它变成了这样
最后每一层单独取消暂停再开启才解决了这个问题。之后在最上面加上一个半加器,这东西……就能算16以内加法了。
总共1700多个部件。可以看出在Algodoo里放弃齿轮之类,按照加法器的思路做东西虽然可行,但是是相当不值得的。
2020年02月09日 12点02分 7
吧务
level 13
强!庞大的工程。
2020年02月09日 14点02分 8
level 11
◆Tron◆ 楼主
加法器做了这么一大堆,输出全是看棍子的位移就太不搭配了。于是利用Algodoo在处理折反射时的魔法特性做了显示的功能。
2020年02月15日 05点02分 9
level 11
◆Tron◆ 楼主
还有一个更不实用但是很好玩的东西,锁存器。
用处就是存下一个二进制数。存储的部分只有中间有三个尖角的那一小块,左侧和右侧是控制写入/读取的。
这个是临时搭出来的,结构还能简化很多。
把乱糟糟的机械盖住大概就是这样:
2020年02月15日 07点02分 10
level 11
◆Tron◆ 楼主
那么明明两根线就能控制的输入/输出,为什么要用四根加两个与门?这不是自找麻烦吗?
在我这种机械没怎么优化,部件很多导致只能放得下一个锁存器的情况下确实是这样,但是真正的逻辑电路的情况就不太一样了。
首先,这样的单元会很多,我们先放64个。
假如我们有个CPU,它应该要能指定往哪个单元里写入,或者去读取其中的哪一个。
呃……这还只画了一小半。
而实际上要用到的单元绝对不止64个,这个问题就很大了。
整理一下这堆东西,64个输入都连到一根线上,输出同理,只分别控制每个单元的输入/输出状态。或者说就像家里只需要接一根自来水管,哪里用水拧开哪里的水龙头就好了。
“这样也没简化啊?虽然输入/输出变成两根线了,控制不还是需要往CPU上接128根?”
接下来是与门的用途。
要指出平面直角坐标系上1000个点里的一个,除了编上1-1000的号,还可以用xy坐标描述它。这一堆单元也可以。
摆成8×8的矩阵。(省略了输入输出线,毕竟已经少多了)
再铺上16条线,相交的位置并不导电。
对每个单元,只考虑控制输入的与门,把它的两个输入分别接到位于它左侧和下侧的两条线上。
由于与门的特性,只有这两根线都为1的时候它才会输出1,就可以通过给一条横线和一条竖线输入1来指定一个单元。这是16根线接到CPU上
加上另外64个与门和输入输出的两根,一共34——比128好了不少。
当然Algodoo里没那么多单元,犯不上这样。另一个原因是机械转个直角比电流麻烦。
2020年02月15日 07点02分 11
level 2
厉害
2020年03月03日 05点03分 12
level 2
楼主玩的软件都蛮好玩
2020年03月03日 05点03分 13
level 3
我平时玩儿发现密度小的不易穿透密度大的。提高缸子密度可能会改善?
2020年03月11日 09点03分 14
调高密度,或者重叠物体可以缓解这一现象。
2020年03月11日 13点03分
一开始做的时候失了智忘记关掉重力了,导致密度不敢调太大[喷]后来的情况要好一些
2020年03月14日 14点03分
1