返回列表 回复 发帖
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
233# 柳烟
柳老师好,我的画板能力实在太差,关于复变模型(1-z^2)/(z-z^2cosz)+c,所有代码都在这里,迭代算法就如模型所示,没有作任何处理,虽然使用了三角不等式着色,但也只是由它来设置画布像素点的不透明度,实际的颜色是由势函数平滑后的et来确定的,至于这个模型的真正结构,我现在还真没摸到门路。这次我将z的初始点换成了c,虽然小M集被扭曲了,但找J集要方便一些:

    scanPlane()//扫描复平面c
    {
        for(var b=iMax,y=0,k=0;y<height;b-=dI,y++) //c平面虚轴,对应画布的y轴
            for(var a=rMin,x=0;x<width;a+=dR,x++,k+=4)//c平面实轴,对应画布的x轴
        {
            var e=iterator(a,b,a,b)//以c为z的初始点进行迭代,返回迭代轨迹数组e
            var co=setColor(e)//依据迭代轨迹e进行着色,返回颜色值co=[r,g,b,a]
            for(j=0;j<4;j++)pix[k+j]=co[j]//在画布上描出该点
        }
    }

    iterator(x,y,a,b)//迭代模型:(1-z^2)/(z-z^2cosz)+c
    {
        var i=-1,e=[{x:x,y:y}],zr,zi;
        while(++i<eT&&((zr=x*x)+(zi=y*y))<eM)//eT、eM 逃逸时间、逃逸半径
        {
            var r2=zr-zi,i2=2*x*y;
            var cr=cos(x)*cosh(y),ci=-sin(x)*sinh(y);
            var x1=1-r2,y1=-i2;
            var x2=x-r2*cr+i2*ci,y2=y-r2*ci-i2*cr;
            var r=x2*x2+y2*y2;
            var xnew=(x1*x2+y1*y2)/r+a,ynew=(x2*y1-x1*y2)/r+b;
            if(sM&&abs(x-xnew)<dem&&abs(y-ynew)<dem)i=eT;//sM 为是否加亮“黑洞”,dem=1/eM
            e.push({x:x=xnew,y:y=ynew});
        }
        return e;
    }

    setColor(e)//三角不等式着色
    {
        var et=e.length-1,ex=e[et].x,ey=e[et].y;
        var t=ln(abs(m)),r=abs(ln(sqrt(ex*ex+ey*ey)))//这里的m=1.125,可以加大色差
        var ac=sqrt(e[0].x*e[0].x+e[0].y*e[0].y);
        var az=0,lb=0,f=0,dist=0,sumEt=0,sumEt_1=0;
        var co=color[255,255,255,255];
        if(et%eT||coInner)
        {
            for(var i=1;i<e.length;i++)
            {
                sumEt_1=sumEt;
                var zr=e[i].x-e[0].x,zi=e[i].y-e[0].y;
                az=sqrt(zr*zr+zi*zi),lb=abs(az-ac);
                sumEt+=(sqrt(e[i].x*e[i].x+e[i].y*e[i].y)-lb)/(az+ac-lb);
            }
            sumEt/=et,sumEt_1/=et-1,f=1+(ln(ln(eM)/2)-ln(r))/t;
            dist=sqrt(sumEt_1+(sumEt-sumEt_1)*f);
            r=ln(r/t)/t,et=abs(et-r)%eT;//势函数平滑,这里仍然使用et着色
            var c=et/cstp,cs=floor(c),ct=ceil(c),v=c%1,u=1-v;
            co[0]=color[cs][0]*u+color[ct][0]*v;
            co[1]=color[cs][1]*u+color[ct][1]*v;
            co[2]=color[cs][2]*u+color[ct][2]*v;
            co[3]=255*dist//三角不等式计算出来的平均距离dist只用来设置像素点的不透明度
        }
        return c;
    }
1.jpg
2.jpg
233# 柳烟
茫然一片:
1.jpg
加亮“黑洞”
2.jpg
内部着色
3.jpg
势函数平滑
4.jpg
5.jpg
Julia集
6.jpg
7.jpg
8.jpg
9.jpg
a.jpg
全部用的:eM=60,eT=120
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
a.jpg
233# 柳烟
柳老师可以在画板中试一下这个,不需要作任何的额外处理:
r=128*(1-cos(ex*ey))
g=128*(1-cos(ex*ex))
b=128*(1-cos(ey*ey))
改变三角函数,色彩有变化但细节不会变。
b.jpg
eM=1200,eT=120
eM=8 比较好,可以看到较多的小M(纯粹的et刻画,势函数平滑使用的指数为1.125):
6.jpg
双鹅区
7.jpg
成堆的小M
8.jpg
天鹅
9.jpg
中心(0.618,0),eM=2,et平滑指数1.02,三角不等式调色板着色
a.jpg
eM=2,平滑指数1.05,纯et。
加大eM后,其内部变得越来越复杂,越来越混沌,小M也就越来越难找;
加大eM后,会湮没一些小M,也会出现一些新的小M:
6.jpg
只要是在横轴上,就能很容易看到小M:
7.jpg
z^2+c:
8.jpg
中心(-0.8411217753092447,0),eM=2,平滑指数m=1.0125
这里看到的应该是一种“反结构”:
7.jpg
8.jpg
9.jpg
a.jpg
b.jpg
宇宙中虫洞的状态由反物质的结构决定,也许物理学家最终会要到数学和哲学里面才能找到解开宇宙秘密的钥匙!
260# 柳烟
柳老师好,问题就在于现在用的不是陷阱算法,所以没办法将下面的翻上来,259楼处理的相当好,可惜我还不会,只要大家加把力,应该能解决这个问题!!!
262# changxde
changxde老师说的极对,经过这一番折腾,似乎有种感觉,很多情况下,从最简单处入手,循序渐进,反而能看到一些被忽视的景观,哪怕是极为刁钻的模型!
说成“奶泡”很有趣,其中心处是平滑的渐隐效果,被多个“奶泡”包围处的蓝点则肯定是小M!
1.jpg
返回列表