sq8073兄弟仔细分析了他的推导,下面我也来分析一下我的:
首先,要确定的是,像这样的阵列是不可能用双向阵列做出来的,是单向阵列做的.
我们要做的是两行的个数相差1,用sq8073兄弟的例子吧,就是一行是5个、一行4个、一行5个、一行4个……而我们的阵列方向控制变量idx1、idx2都是0,1,2,3……开始的有限数列.单向数列,那就是要想办法把idx1这个数列变个样子,进行一个转换,以使我们能够把它按5个/4个/5个/4个……的进行分段.这个转换,其实就是数学问题了,根据各人的经验,可能有很多不同的转换法,只要转换成功,问题就解决了一半了.
Sq8073兄弟的转换是一种办法.下面说说我的办法:
研究一下0,1,2,3,4,5,6,7,8,9,10,11,12…..这个数列,它除以一个奇数N,结果是:0,1/N,2/N,3/N,4/N,5/N,6/N,7/N,8/N,9/N,10/N,11/N,12/N……,这个新的数列就不再全都是整数了,而是0后面有N-1个小数数,之后是1,1后面又有N-1个小数数,之后是2,2后面又有N-1个小数数,之后是3……而N是奇数,故N-1是偶数,取其中一段N-1个小数数字来看,前(N-1)/2个是小于K.5(K=0,1,2,3…)的,后(N-1)/2个是大于K.5(K=0,1,2,3…)的.
再把0,1/N,2/N,3/N,4/N,5/N,6/N,7/N,8/N,9/N,10/N,11/N,12/N……这个数列的乘以2,产生的新数列是0,2/N,4/N,6/N,8/N,10/N,12/N,14/N,16/N,18/N….,这个数列有什么特征呢?它是0后面有N-1个小数数,之后是2,2后面又有N-1个小数数,之后是4,4后面又有N-1个小数数,之后是6…..,取其中一段N-1个小数数字来看,前(N-1)/2个是小于K(K=1,3,5,7…)的,后(N-1)/2个是大于K(K=1,3,5,7…)的.
OK,这个数列就是我们要的数列了,用一下floor或ceil看看.比如N=9,
Floor:00000 1111 22222 3333 44444 5555 66666 7777
Ceil:0 1111 22222 3333 44444 5555 66666 7777
(上面两行我故意调整了一下空格,只为了看起来清楚点)
这不,Floor这个数列不就正好是我们所要的吗.
于是用关系:
A=floor(idx1/4.5) (注意啦,除以9又乘以2,所以分母是4.5啦!)
memb_v=lead_v+idx1*B (第一个尺寸,行方向,B是增量)
memb_v=lead_v+A*C (第二个尺寸,列方向,C是增量)
阵列后看看?原来行方向是一行的行头接前一行的行尾跑了.
[ 本帖最后由 袖珍天使 于 2005-10-13 12:14 编辑 ] |