返回列表 回复 发帖
156# 柳烟
柳烟老师好,从专业的角度我也是不大明白,只知道 DLD(Discrete Lagrangian Descriptor 离散拉格朗日描述符 )在分形图像渲染时可以展示放射线(External Ray),其视觉效果还不错。原本的放射线是比较生硬的:
01.jpg
将迭代路径上的各点映射到黎曼球后,放射线会变得优雅华丽起来,按原作者的说法,黎曼球映射实际上是起到平滑( smooth function)的作用。
02.jpg
应该有很多方法来弱化等势线,只是还没找到:
03.jpg
04.jpg
这款指数射线虽然简单,但效果还不错。
001.jpg
002.jpg
000.jpg
159# xuefeiyang
我这里 M集 z0 = c,  不知对不对,试了其他的都不理想,看着象乌贼。
000.jpg
J 集最大迭代次数 et 大一点,颜色会淡一点。
001.jpg
002.jpg
161# xuefeiyang
这种变体模型的初值确实不好弄,试了几个,Z0=C^(-m) 比较合适,原作者的 m 好像为 -sqrt(.275),  只给了 J 集图片,不过里面的 J 集确实颇具观赏性,好强的立体感。
001.jpg
002.jpg
003.jpg
163# xuefeiyang
J 集的表现确实如此,不过,我是这样理解的:z0 是 M 集的临界点(critical point),J 集是给定的 c 在 z 平面的动力结构,不管 M 集的 z0 取何值,结构如何,对 J 集都没有影响。
001.jpg
002.jpg
003.jpg
165# xuefeiyang
我也是一样的,依据 M 集的图像找 J 集,对于那些临界点比较怪异的模型确实是蛮痛苦的,但也只能这样,反复的实验,能较为接近就很满足了。网上的那些专家们,直接看着数学模型就能知道个大概,好不羡慕。

关于截图,我这个比较简单,整个软件其实就是一个网页,所以截图和上网在浏览器里看到的图片的操作方式是一样的,如果要带上参数设置的信息,则使用 windows 系统自带的软件界面截图(Alt+PrtSc)把整个页面截下来。然后用位图软件 Ps 或矢量软件 Ai, corelDraw 处理就行了。论坛里上传图片不能超过 200k,
所以,大部分图片都要降质处理。
001.jpg
169# xuefeiyang
这模型很漂亮,#26 楼做过,当时 Z0 = 0, 三条直臂有点像吉他,取了个名字叫guita.
001.jpg
002.jpg
记起来了,实验方法找临界点时,若图像中有小M,尽量把它调到和 z^2+c 的一样就可以了。
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
172# xuefeiyang
f(z)=(1,0,-1)/(0,1,-0.01,0.004) 这个如何弄,右边没有变量吗?
“蜂窝陷阱”的作者实际上用来将M集内部渲染成蜂窝状,为后面的3D渲染做准备,作者只给了图片,不知其算法。
003.jpg
004.jpg
177# xuefeiyang

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