返回列表 回复 发帖
169# xuefeiyang

有种叫“蜂窝陷阱”的算法,可以呈现水晶效果:

cellularTrap( e, et, em, tri )
{
    let  i = e.length - 1, z0 = 0;
    while( Z.norm( e[ z0 ] ) == 0 ) z0 ++; 确定迭代轨迹中第一个|z|不为 0 的点的序号 z0。
    let cp = Z.new( 0, 0 ),  给定捕捉点
        dist = Z.norm( e[ z0 ], cp ), 迭代轨迹中第一点与捕捉点的距离
        dist2 = em * dist; 设定一个比最小距离大的次小距离
    for ( let k = z0 + 1; k < e.length; k ++ ) { 从z0后面的点开始计算
         let trap = Z.norm( e[ k ], cp ); 计算每一点与捕捉点的距离
         if( trap < dist ) dist2 = dist, dist = trap; 确保 dist 为最小距离,
         else if ( trap < dist2 ) dist2 = trap;       而 dist2 为次小距离。
    }
    let p = .25,
        a = pow( 1 - dist / dist2, p ),
        rgb = tri( a );
    return [ ...rgb, 255 ];
}
Z.norm( z, cp )=(z.r-cp.r)*(z.r-cp.r)+(z.i-cp.i)*(z.i-cp.i)
计算两点之间的距离因该是Z.abs(z,cp) =sqrt((z.r-cp.r)*(z.r-cp.r)+(z.i-cp.i)*(z.i-cp.i)), 用Z.norm是为了减少计算,所以,给定的逃逸半径 em 在程序中是被平方了的:em=em*em.
下面分别是169#那个模型z0=0,z0=(1/2)^/(1/3)的 M 集
001.jpg
002.jpg
171# xklppp



这个方法好!可惜有些关键词不懂含义。能不能用数学的语言把这段代码表述一下?
有时间了试试这个分式线性变换:
48.png
临界点的值取(0.00981,-0.99208)
171# xklppp
二次分岔图?!体现了分形的周期性
172# xuefeiyang
f(z)=(1,0,-1)/(0,1,-0.01,0.004) 这个如何弄,右边没有变量吗?
“蜂窝陷阱”的作者实际上用来将M集内部渲染成蜂窝状,为后面的3D渲染做准备,作者只给了图片,不知其算法。
003.jpg
004.jpg
174# xklppp


肖老师,不好意思,就是变换:f(z)=(1+z-z^2)/(z-0.01z^2+0.004z^3)+c,我懒省事,只把系数标出来,平时的坏习惯。
171# xklppp
是不是可以这样理解:就是设定一个捕捉点,两个正常数分别是dist和dist2,dist<dist2.然后计算每一次迭代的终点到捕捉点的距离d,对d,dist,dist2排序,最小的和次小的分别赋予dist,dist2?
蜂窝.gsp (33.27 KB) 171# xklppp

1、根据你的提示“dist = Z.norm( e[ z0 ], cp ), 迭代轨迹中第一点与捕捉点的距离”,第一个模不为零的点是c,若设置cp=(0,0),则dist 的值会随着c的位置变化,蜂窝的形状也随之变化,蜂窝的形状是可变的?
2、当我设置dist为常数1时,发现左边少了一些络线,而右边又多出一些络线(就是那些高亮的线);dist的值设置大于4时,和你作的图形一致;
3、我试了类似于三角着色法作,也就是步长累积,那就没有这个效果了。
49.png
下图是捕捉点设置为c的结果:
50.png
麻烦你看一下文件,哪里计算出错还是参数设置有误。
#172的临界点的值是用newton迭代法求的。
177# xuefeiyang

你的做法没错,就是这个效果。
一、这款算法中,迭代路径中始终只有两个点起作用,也就是与给定捕捉点距离最小和次小的两个点,三角不等式、指数累加,DLD 等一些算法是所有的点都用上了,所以就不是这个效果了。
二、最小距离 dist 的初值不能随意指定,必须是迭代路径中实际存在的点,在做 M 集时,由于  c 平面上的点可能在逃逸半径内,也可能在逃逸半径外,dist 给得过小,可能迭代路径中没有比它更小的点。只要出现这种情况,这个 dist 所代表的点就不存在。至于 dist2 只要给得足够大就可以了,最好超出逃逸半径。
三、陷阱捕捉点 cp 的实部 cp.r 决定蜂窝线在实轴上的位置,虚部 cp.i 决定蜂窝线在虚轴上的位置,其实,cp(0,0)的效果弱化了囚集,不做处理 大 M 小 M 根本看不清,单就视觉效果而言,最适当设置应该是 cp(1,0).
四、“蜂窝陷阱”作者的目的是做3D效果,你把高光线条逆反一下就知道了,不过并不看好。
178# xuefeiyang
这类分式模型一般都很难搞,z0 不知如何给,那一大串的演算很麻烦。
002.jpg
001.jpg
返回列表