public IncisionOf3DMandelbrot(Quaternion Rotater=null,ulong IterationsCount = 40UL, double LeftEdge = -2.1D, double RightEdge = 1.1D, double TopEdge = -1.1D, double BottomEdge = 1.1D) { 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 (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(); }
private void button1_Click(object sender, EventArgs e) { int i = 0; double[] vector; lastrot.Clear(); foreach(string str in richTextBox1.Lines) { if (str.Length < 1) continue; if (!checkstr(str)) { i++; continue; } if ((vector=getvector(str)) == null) continue; if (Rotater == null) Rotater = new Quaternion(GetRad(str), vector[0], vector[1], vector[2]); else Rotater=Rotater*new Quaternion(GetRad(str), vector[0], vector[1], vector[2]); lastrot.Add(str); } DialogResult = DialogResult.Yes; if (Rotater == null) Rotater = Quaternion.Null; //if (Rotater.Radian == 0) Rotater = Quaternion.Null; this.Dispose(); }
public static Quaternion operator *(Quaternion a,Quaternion b) { Quaternion result = new Quaternion(); result._x=a._scalar*b._x+a._x*b._scalar+a._y*b._z-a._z*b._y; result._y=a._scalar*b._y-a._x*b._z+a._y*b._scalar+a._z*b._x; result._z=a._scalar*b._z+a._x*b._y-a._y*b._x+a._z*b._scalar; //new Quaternion(addvec(addvec(mulvec(a.vec,b.vec),mulvec(a.w,b.vec)),mulvec(b.w,a.vec))); result._scalar = a._scalar * b._scalar - a._x * b._x - a._y * b._y - a._z * b._z; //scalarmul(a.vec, b.vec); return result; }
private Quaternion negative_mul(Quaternion a) { Quaternion b = this; Quaternion result = new Quaternion(); result._x=-a._scalar * b._x + a._x * b._scalar - a._y * b._z + a._z * b._y; result._y=-a._scalar*b._y+a._x*b._z+a._y*b._scalar-a._z*b._x; result._z=-a._scalar*b._z-a._x*b._y+a._y*b._x+a._z*b._scalar; result._scalar = a._scalar * b._scalar-a._x*b._x-a._y*b._y-a._z*b._z; return result; }
public virtual double[] Rotate(double[] Vector) { if (Vector == null) throw new ArgumentNullException(); Quaternion result; if (Vector.Length > 2) result = new Quaternion(Vector[0], Vector[1], Vector[2]); else if (Vector.Length > 1) result = new Quaternion(Vector[0], Vector[1], 0); else if (Vector.Length > 0) result = new Quaternion(Vector[0], 0, 0); else throw new ArgumentException(); result=negative_mul(this * result); return new double[]{result._x,result._y,result._z}; }
public object Clone() { Quaternion result = new Quaternion(); result._scalar = this._scalar; result._x = this._x; result._y = this._y; result._z = this._z; return result; }
public static Quaternion operator +(Quaternion a,Quaternion b) { Quaternion result = new Quaternion(); result._scalar = a._scalar + b._scalar; result._x = a._x + b._x; result._y = a._y + b._y; result._z = a._z + b._z; return result; }