返回列表 回复 发帖
我是这样算的:p=sgn(1-sgn(x^2+y^2-10^15)*sgn(abs(trap-dist))*p0,t=0,t=t+p,z=p(z1-z0)+z0,可能我的理解错了,到现在为止我还没有找到正确的结果。如何用幅角着色?我一用幅角就出来等势线。 0.gsp (11.67 KB)
191# xuefeiyang
001.jpg
这个幅角因该不是dist那个点的幅角。
这种方法可以避开条件判断找到最小距离值,但距离最小究竟是哪个点,却是无法知道,就 a, b 来说,小=(a+b-|a-b|)/2, 大=(a+b+|a-b|)/2, 究竟 a 小还是 b 小不得而知。
并且,当排序元素超过两个时就非常麻烦,这里可以排三个,是因为有个前提:dist<dist2。
这里的幅角着色必须是与cp距离最小的那个点的幅角,在HSB( h, s, b )中,
若蜂窝特征值 t = 1 - pow( 1 - dist / dist2, p ),则:
h = |距离最小点幅角|/PI,
s = sqrt( t ),
b = t;
191# xuefeiyang

有一种侥幸的计算,可以记住距离最小的点:
z 为之前那个 dist 点, z1 为 trap 点
s = sgn(trap-dist)
z = .5*(1+s)*z+.5*(1-s)*z1
赌 trap<>dist。
次小点 dist2 则先要确定 trap 和 dist 中谁大,然后按同样的方法也可以记下。
193# xklppp
你先往下学,我可能需要一些时间想清楚这种算法的核心思想及如何在画板里实现。有时间了你看看我的思路有没有问题。对于迭代序列中的每一个点到捕捉点的距离是可求的,每一个点的自身属性也是清晰的,对于三个确定的实数dist,dist2,trap也是可以排序的,自然可以确定这三个实数中最小的和次小的,这三个数产生的次序是由两个旧数dist,dist2和一个迭代衍生出来的新数trap(z)重新排序产生新的二元数dist,dist2。现在的目标是确定最小数dist及次小数dist2对应的迭代序列里复数,以及它们的序号。dist,dist2如果作为迭代初始变量,它们与迭代序列里的点是没有对应关系的,通常遇到这种情况是需要定义对应关系的,第三个数trap既然来源于迭代序列里的数到捕捉点的距离,自然与迭代序列里的数之间有对应关系,这种关系是确定的。在经过若干次迭代之后的dist,dist2可以就转换成trap的值了,也就是后续的dist,dist2也就与迭代序列里的点有了对关系。解决整个问题的关键是要搞清楚这种对应关系,难点是如何定义最初两个迭代初始变量dist,dist2对应的复数。如果定义trap(z1),trap(z2)排序后的两个数分别作为迭代初始变量dist,dist2的值,那么就构建了一种对应关系,trap应该就是trap(z3),这样定义可以迭代下去,对应关系也确定。为了保证算法的一致性,将z2作为迭代初始值,trap(z1),trap(z2)的值分别作为dist,dist2的初始值。具体能不能行得通还需要实验来说明。
194# xuefeiyang

思路是完全正确的,只要z0<>0 (比方说:z0 = c)  就可以解决问题:
若 em = 逃逸半径,cp = 捕捉点,则:
dist 对应点 z = z0,
dist = |z0 - cp|;
dist2 对应点可设为 z2 = em*z0 = ( em*z0.r,  em*z0.i ),
dist2 = |z2 - cp|;
不知道这样行不行。
195# xklppp
我按我的思路刚试作了一下,得到的形状和我们原来作法基本一致,但色彩的明暗比却差别有点大。
52.png
196# xuefeiyang
没问题啊,把明暗逆反就行了。
可以根据画板的色彩特点,对 dist,dist2做些后期处理,因该是没问题。每个系统的色彩处理都有些许的差异,同样的 HSL,HSB,HSV 模式,我弄出来和Mathematica的就是不一样。
197# xklppp
你看看画板文件有没有问题: 03.gsp (199.05 KB)
198# xuefeiyang
000.jpg
这样计算,实际上是 trap 和 dist2 中的小者,而不是 trap 与 dist 中的大者与dist2 的比较,看样子还是不能偷懒啊:
dist2=.5(.5(dist+trap+|dist-trap|)+dist2-|dist2-.5*(dist+trap+|dist-trap|)|)
在确定对应点时,|dist-dist|... 应该恒等于 0。
199# xklppp
终于作出来了,只是色彩不好: 54.png
返回列表