protected override void _m_create_part_of_fractal(_2DFractal.AbcissOrdinateHandler p_aoh, _2DFractal._2DFractalHelper fractal_helper) { ulong max_iter=f_iterations_count, iterations; ulong[][] iter_matrix=fractal_helper.CommonMatrix; double[][] Ratio_matrix = fractal_helper.GetRatioMatrix(),radian_matrix=((RadianMatrix)fractal_helper.GetUnique(typeof(RadianMatrix))).Matrix; double[] abciss_points = fractal_helper.AbcissRealValues, ordinate_points = fractal_helper.OrdinateRealValues; double abciss_point, dist, pdist=0D,abciss_start=_2df_get_double_abciss_start(),abciss_interval_length=_2df_get_double_abciss_interval_length(), ordinate_start=_2df_get_double_ordinate_start(),ordinate_interval_length=_2df_get_double_ordinate_interval_length(); FractalCloudPoints fcps = (FractalCloudPoints)fractal_helper.GetUnique(); FractalCloudPoint[][][] fcp_matrix = fcps.fractalCloudPoint; int percent_length = fractal_helper.PercentLength, current_percent_state = percent_length; List<FractalCloudPoint> fcp_list=new List<FractalCloudPoint>(); FractalCloudPoint fcp; int fcp_height = ordinate_points.Length / _ordinate_step_length + (ordinate_points.Length % _ordinate_step_length != 0 ? 1 : 0); Complex z = new Complex(), z0 = new Complex(),last_valid_z=new Complex(); for (; p_aoh.abciss < p_aoh.end_of_abciss;p_aoh.abciss++ ) { abciss_point = abciss_points[p_aoh.abciss]; radian_matrix[p_aoh.abciss] = new double[ordinate_points.Length]; if (p_aoh.abciss % _abciss_step_length == 0) fcp_matrix[p_aoh.abciss / _abciss_step_length] = new FractalCloudPoint[fcp_height][]; for(;p_aoh.ordinate<p_aoh.end_of_ordinate;p_aoh.ordinate++) { iterations = 0; dist = 0D; z0.Real = abciss_point; z0.Imagine = ordinate_points[p_aoh.ordinate]; z.Real = z0.Real; z.Imagine = z0.Imagine; if(((p_aoh.abciss%_abciss_step_length)==0)&&((p_aoh.ordinate%_ordinate_step_length)==0)) { fcp_list.Clear(); for(;iterations<(ulong)_max_ammount_at_trace&&dist<=4D;iterations++) { pdist = dist; last_valid_z.Real = z.Real; last_valid_z.Imagine = z.Imagine; z.tsqr(); z.Real += z0.Real; z.Imagine += z0.Imagine; dist = (z.Real * z.Real + z.Imagine * z.Imagine); fcp.AbcissLocation = (int)((z.Real - abciss_start) / abciss_interval_length); fcp.OrdinateLocation = (int)((z.Imagine - ordinate_start) / ordinate_interval_length); fcp_list.Add(fcp); } fcp_matrix[p_aoh.abciss/_abciss_step_length][p_aoh.ordinate/_ordinate_step_length] = fcp_list.ToArray(); } for (; iterations < max_iter && dist <= 4D; iterations++) { pdist = dist; last_valid_z.Real = z.Real; last_valid_z.Imagine = z.Imagine; z.tsqr(); z.Real += z0.Real; z.Imagine += z0.Imagine; dist = (z.Real * z.Real + z.Imagine * z.Imagine); } Ratio_matrix[p_aoh.abciss][p_aoh.ordinate] = pdist; iter_matrix[p_aoh.abciss][p_aoh.ordinate] = iterations; radian_matrix[p_aoh.abciss][p_aoh.ordinate] = Math.Atan2(last_valid_z.Imagine,last_valid_z.Real); } p_aoh.ordinate = 0; if((--current_percent_state)==0) { current_percent_state = percent_length; f_new_percent_in_parallel_activate(); } } }