Received: from lists.xmission.com (lists.xmission.com [198.60.22.7]) by mail-atm.san.rr.com (8.8.7/8.8.8) with SMTP id CAA05779; Sat, 10 Jan 1998 02:52:28 -0800 (PST) Received: from domo by lists.xmission.com with local (Exim 1.73 #4) id 0xqyW3-0001pN-00; Sat, 10 Jan 1998 03:51:48 -0700 Date: Sat, 10 Jan 1998 05:54:22 -0500 (EST) Message-Id: <199801101054.FAA06276@freenet2.carleton.ca.carleton.ca> From: ao950@freenet.carleton.ca (Paul Derbyshire) To: fractint@lists.xmission.com Subject: (fractint) Determining if Two Points Hit The Same Attractor...or Siegel Disks Too! Sender: owner-fractint@lists.xmission.com Precedence: bulk Reply-To: fractint@lists.xmission.com Content-Type: text X-UIDL: 79f1295d4b7453c25882ee71425dcffe If you iterate two z, how can you tell if they hit the same attractor? If it's a cyclic attractor, the two z's might not be the same. Simple trick: pick an upper cutoff maxit. Iterate z1 ... z_n floor(maxit/2) times. Call the results b1 ... b_n. With original z1 ... z_n again, iterate them again, until at most maxit iterations in total (ceil(maxit/2) more iterations that is). After each iteration, compare each z_k with all the b_i, i <> k. If it has reached one of the b_i, remove z_k and b_k. i and k are the same attractor, out of phase; the two b_i and b_k are redundant. After the process is complete, the remaining b's, which can be renamed a1 through a_j, are points on j distinct attractors. One problem remains: detecting the exceptional case of Siegel disks. A point on a Siegel disk will eventually hit itself (using a "hit" function returning true if two complex numbers differ by less than a tiny epsilon) but if you have five points in a Siegel disk, chances are they will not hit each other, only themselves, and you will obtain five would-be "attractors" and large black areas in the image. This is Not Good. To check for Siegel disks, after the above attractor detection, each of the a_i is iterated along with say three random points in a triangle about a_i and a small epsilon distance away; this is stopped when a_i has hit itself. A Siegel disk is assumed if: a_i has just hit itself, the three other points all hit themselves, and they did not actually converge onto a_i. In that case, we find the disk's centre as follows: starting from a_i, iterate it once along with a smallish triangle of side r of surrounding points. Note the distance traveled by each. The one that traveled the shortest distance is closest to the disk's centre. Move a_i the distance r*1 in that direction, i.e. onto that point. Iterate the new a_i and a new triangle (side r) and pick again the point closest to the center, move r*10 that way. Do one more iteration. Note as d1 the distance traveled by the original a_i, d2 the subsequent a_i, and d3 this a_i. Choose m=(2*d2-d3-d1)/9, compute d3/m, move a_i that far in the same direction. Iterate it and note distance traveled. If nontrivial, repeat the whole thing again. Repeat as necessary. At last, leave a_i fixed; it is the Siegel disk center. Flag it as being such and not an attractor and record the 'period'. After doing this for all the a_k, eliminate redundant ones, ones differing by less than an epsilon or so. These were in the same Siegel disk and found the same centre. Now during generation, check not only for points converging to any of the a_i, but for a point that recurs with a period corresponding to (one of) the Siegel disk(s), and for any such, use the distance from the original pixel to the corresponding a_i Siegel center as m1 and the angle to a_i of the original pixel as m2. (The m2 can be normalized readily enough but the m1 for each/the disk will probably have to be normalized after the generation, not during; for each Siegel disk keep track of an m1_max, starts as 0 and after every pixel found to be in the Siegel disk, put m1_max->max(m1_max,m1). Then go through the database of pixels and for all the points in each disk, divide all the m1's by the appropriate disk's m1_max to normalize them all to the interval [0,1]. -- .*. Friendship, companionship, love, and having fun are the reasons for -() < life. All else; sex, money, fame, etc.; are just to get/express these. `*' Send any and all mail with attachments to the hotmail address please. Paul Derbyshire ao950@freenet.carleton.ca pgd73@hotmail.com - ------------------------------------------------------------ Thanks for using Fractint, The Fractals and Fractint Discussion List Post Message: fractint@xmission.com Get Commands: majordomo@xmission.com "help" Administrator: twegner@phoenix.net Unsubscribe: majordomo@xmission.com "unsubscribe fractint"