怪哉!
mathcad吧
全部回复
仅看楼主
level 15
月城翁 楼主
今天做Koch曲线(2D折线函数)时,遇到一个怪现象。(MC15 m030)
折线有连续的3点,a(xa,ya),b(xb,yb),c(xc,yc) 。如果点坐标的矩阵是列矩阵:
xa ya
xb yb
xc yc
可以正确绘出连续的折线。
如果矩阵变成:
NaN NaN
xa ya
xb yb
NaN NaN
xb yb
xc yc
NaN NaN
那么,后面这一组直线就不会出现。
但是,如果不让两组xb yb隔着NaN NaN相邻:
NaN NaN
xb yb
xc yc
NaN NaN
xa ya
xb yb
NaN NaN
又可正常绘出这两组直线。不知什么缘故?
2014年07月16日 14点07分 1
level 12
MC15M030的bug,在MC11里没问题。
2014年07月16日 15点07分 2
谢谢!
2014年07月16日 15点07分
level 12
月城,我把这个问题发到了PTC论坛,得到的答复是,这确实是MC15的一个bug,解决办法是,如果你仅仅想看到线,是否显示数据点无关紧要,双击图片,选择“轨迹”,将“类型”从“线条”改为“绘制”即可。
2014年07月17日 00点07分 3
谢谢您这么热心。
2014年07月17日 03点07分
level 12
月城,下载看看这个:http://1000eb.com/xm39
这是PTC论坛里就这个bug做的更深一些的讨论,很有些意思。NaN分开的点,在近似相等的时候,也有可能绘制不出第二条线来。
2014年07月18日 14点07分 4
level 15
月城翁 楼主
谢谢!已经研究过了。相等,编程时还可绕过这个bug;近似,编程就更得谨慎。
再烦您,问一下,如果把NaN换成1i,会不会也有这个bug?
在认识NaN之前,我都是用1i,作为分隔符。但是,最近学习inside的图像编程,它的中间计算过程主要是用复数(LNSZDZG老师曾经称赞MC的复数功能,这一回,恐怕我也要皈依“复”教了),只是在显示图像时,如果不用复平面显示,才把数据转换成实数。所以用1i做间隔符,有可能与复数计算分不清楚,出错。
如果把NaN换成1i,没有NaN这种bug,可能得优先考虑使用1i 。在画图时,总有要“抬笔”重画的时候,必须在矩阵中产生断点。不知除了用1i和NaN外,还有什么别的办法?
请赐教。
2014年07月18日 23点07分 5
把1i或NaN换成字符串,有时MC拒绝计算,说是不合法的矩阵。而且,用字符串是否也有上述的bug也不清楚。
2014年07月18日 23点07分
level 12
月城,你就不能filterNaN()一下么?
2014年07月19日 05点07分 6
level 15
月城翁 楼主

那就把含有NaN的行都删了。NaN是特意加进去的,起“抬笔”的作用,从新的一点开始画,不与前面的点连接。所以不能删NaN。除非MC有“抬笔”函数。
2014年07月19日 06点07分 7
好像你的意思是想在已有的矩阵上面加分叉,而这个分叉的位置是变量,随着函数的变化而变化,是这个意思么?
2014年07月19日 06点07分
level 15
月城翁 楼主

不是分叉,是断点。比如先画直线a-b,再画直线c-d,两直线不能相连接,就是b-c之间不能连接,在矩阵中,必须将它们隔开。于是在矩阵中人为地插入NaN。就成了a,b,NaN,c,d。这是我用的土办法,可能正规的做法不是这样。但是,如果是a,b,NaN,b,c,后面的b-c的直线就丢失了,这个位置就不能有NaN。
2014年07月19日 08点07分 8
用submatrix完成这件事儿可能是正规的做法吧。
2014年07月19日 08点07分
level 13
这个问题我在做分形树的时候,曾经大量遇到过,当时吧,由于采用复数作图,i时不能用了,NaN我在那时还不知道怎么用,就用了非常愚蠢的办法解决这个问题。
比如要画a-b-c-b-d的分叉树,我就这样处理——a-b-c-b-d-b-a,本来四个点可以搞定,我用了七个点来画,虽然分形树能做出来,但冗余数据太多了,导致运行速度很慢。
2014年07月19日 08点07分 9
level 13
现在看来,分形树的程序有很大的优化空间啊!
2014年07月19日 08点07分 10
因为类似的原因,在进一步学分形前,我才转回来研究MC的基本的东西。
2014年07月19日 09点07分
1