public IncisionOf3DJulia(Quaternion Rotater=null,ulong IterationsCount = 40UL, double LeftEdge = -1.5D, double RightEdge = 1.5D, double TopEdge = -1.1D, double BottomEdge = 1.1D,Triplex Const=null) { f_iterations_count = IterationsCount; _2df_left_edge = LeftEdge; _2df_right_edge = RightEdge; _2df_top_edge = TopEdge; _2df_bottom_edge = BottomEdge; f_number_of_using_threads_for_parallel = Environment.ProcessorCount; if (Const == null) inc_const = new Triplex(); else inc_const = (Triplex)Const.Clone(); if (Rotater == null) inc_rotater = Quaternion.Null; else if (Rotater.Radian == 0D) inc_rotater = Quaternion.Null; else if (Rotater is Quaternion.QuaternionNull) inc_rotater = Quaternion.Null; else inc_rotater = (Quaternion)Rotater.Clone(); f_allow_change_iterations_count(); }
protected virtual void inc_create_part_of_fractal(AbcissOrdinateHandler p_aoh,_2DFractalHelper fractal_helper) { ulong iter_count = f_iterations_count, iteration; ulong[][] matrix = fractal_helper.CommonMatrix; double[] abciss_points = fractal_helper.AbcissRealValues, ordinate_points = fractal_helper.OrdinateRealValues; double abciss_point, dist, pdist = 0D; double[][] Ratio_matrix = (double[][])fractal_helper.GetRatioMatrix(); int percent_length = fractal_helper.PercentLength, current_percent = percent_length; double[][] Radian_matrix = ((RadianMatrix)fractal_helper.GetUnique(typeof(RadianMatrix))).Matrix; int height = ordinate_points.Length; double cosrad = Math.Cos(inc_rotater.Radian),sinrad=Math.Sin(inc_rotater.Radian); Triplex z=new Triplex(), z0=(Triplex)inc_const.Clone(),last_valid_z=new Triplex(); inc_rotater.Rotate(z0); 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[height]; for (; p_aoh.ordinate < p_aoh.end_of_ordinate; ++p_aoh.ordinate) { z.x = abciss_point; z.y = ordinate_points[p_aoh.ordinate]; z.z =0; inc_rotater.Rotate(z); dist = 0D; for (iteration = 0; iteration < iter_count && dist < 4D; iteration++) { pdist = dist; last_valid_z.x = z.x; last_valid_z.y = z.y; last_valid_z.z = z.z; z.tsqr(); z.tadd(z0); dist = (z.x * z.x + z.y * z.y + z.z * z.z); } Ratio_matrix[p_aoh.abciss][p_aoh.ordinate] = pdist; matrix[p_aoh.abciss][p_aoh.ordinate] = iteration; Radian_matrix[p_aoh.abciss][p_aoh.ordinate] = Math.Atan2(last_valid_z.y, last_valid_z.x) * cosrad + sinrad * Math.Atan2(last_valid_z.z, last_valid_z.x); } p_aoh.ordinate = 0; if ((--current_percent) == 0) { current_percent = percent_length; f_new_percent_in_parallel_activate(); } } }
public override void Rotate(Triplex arg) { }
void IUsingComplex.SetComplex(Complex Complex) { if (Complex == null) { throw new ArgumentNullException(); } inc_const = Complex; }
public virtual void Rotate(Triplex arg) { double[] vec = new double[] {arg.x,arg.y,arg.z}; vec = Rotate(vec); arg.x = vec[0]; arg.y = vec[1]; arg.z = vec[2]; }