const Complex operator+(Complex const& _cl, Complex const& _cr) { double re = _cl.Re() + _cr.Re(); double im = _cl.Im() + _cr.Im(); return Complex(re, im); }
void test_SamplePHCurve() { cout << "TEST : test_SamplePHCurve()" << endl; // Create a PHCurve interpolator from the PH curve coefficients // for an arc connecting the three points {(-1,1),(0,2),(1,1)} PH5Curve<PH5TYPE> ph(ph_arc()); PH5TYPE vMax = 100; // maximum velocity (mm/s) PH5TYPE tvMax = 0.01; // time to achieve maximum velocity (seconds) PH5TYPE vIn = 0; // initial velocity (mm/s) PH5TYPE vCruise = vMax; // cruising velocity (mm/s) PH5TYPE vOut = 0; // final velocity (mm/s) // Create a quintic feedrate for traversing the above curve smoothly PHFeed<PH5TYPE> phf(ph, vMax, tvMax, vIn, vOut, vCruise); int16_t N = 100; // number of points to interpolate PH5TYPE E = 0; // interpolation normalized parametric state [0,1] // Generate a set of points using PH feed rate along PH curve cout << "X,Y" << endl; for (PH5TYPE tPoint = 0; tPoint <= N; tPoint++) { E = phf.Ekt(E, tPoint / N); Complex<PH5TYPE> point = ph.r(E); cout << point.Re() << "," << point.Im() << endl; } cout << "TEST : test_SamplePHCurve() OK " << endl; }
void Threads::FnBac(const Complex & cpx, int *res) const { int iter =0; Complex tmpp; Complex tmp; Complex tmpn(cpx); for (iter = 0; tmpn.Abs2() < 4 && iter < maxIter ;iter++){ tmp = tmpn; tmpn = tmp * tmp + tmpp.Re() + tmpp.Im() + julia_c; tmpp = tmp; } *res = iter; }
Complex Complex::operator*(Complex& theComplex) { this->real = (this->real)*(theComplex.Re())-(this->imaginary)*(theComplex.Im()); this->imaginary = (this->real)*(theComplex.Im()) + (theComplex.Re())*(this->imaginary); return *this; }
Complex Complex::operator-(Complex& theComplex) { this->real -= theComplex.Re(); this->imaginary -= theComplex.Im(); return *this; }
void test_Complex() { cout << "TEST : test_Complex()" << endl; Complex<PH5TYPE> c1(1, 2); ASSERTEQUAL(c1.Re(), 1); ASSERTEQUAL(c1.Im(), 2); Complex<PH5TYPE> c5(3, 4); ASSERTEQUAL(5, c5.modulus()); Complex<PH5TYPE> c15 = c1 + c5; ASSERT(c15 == Complex<PH5TYPE>(4, 6)); ASSERT(c1 + 1 == Complex<PH5TYPE>(2, 2)); Complex<PH5TYPE> c13(1, 3); Complex<PH5TYPE> c24(2, 4); Complex<PH5TYPE> c1324 = c13 - c24; ASSERT((c13 - c24) == Complex<PH5TYPE>(-1, -1)); ASSERT((c24 - c13) == Complex<PH5TYPE>(1, 1)); ASSERT((c13 - 1) == Complex<PH5TYPE>(0, 3)); ASSERT((c13 * c24) == Complex<PH5TYPE>(1 * 2 - 3 * 4, 1 * 4 + 3 * 2)); ASSERT((c24 * c13) == Complex<PH5TYPE>(1 * 2 - 3 * 4, 1 * 4 + 3 * 2)); ASSERT((c13 * 2) == Complex<PH5TYPE>(2, 6)); ASSERT(c13.conj() == Complex<PH5TYPE>(1, -3)); Complex<PH5TYPE> cr = c13.recip(); PH5TYPE epsilon = 0.000001; ASSERTEQUALT(cr.Re(), 0.1, epsilon); ASSERTEQUALT(cr.Im(), -0.3, epsilon); Complex<PH5TYPE> crr = cr.recip(); ASSERTEQUALT(crr.Re(), 1, epsilon); ASSERTEQUALT(crr.Im(), 3, epsilon); Complex<PH5TYPE> c13div24 = c13 / c24; ASSERTEQUALT(c13div24.Re(), 0.7, epsilon); ASSERTEQUALT(c13div24.Im(), 0.1, epsilon); Complex<PH5TYPE> sum1; sum1.add(c13); ASSERT(sum1 == Complex<PH5TYPE>(1, 3)); sum1.add(c24); ASSERT(sum1 == Complex<PH5TYPE>(3, 7)); ASSERT(Complex<PH5TYPE>(25).sqrt() == Complex<PH5TYPE>(5)); ASSERT(Complex<PH5TYPE>(-1).sqrt() == Complex<PH5TYPE>(0, 1)); ASSERT(Complex<PH5TYPE>(3, 4).sqrt() == Complex<PH5TYPE>(2, 1)); ASSERTEQUALS("0", Complex<PH5TYPE>().stringify().c_str()); ASSERTEQUALS("1", Complex<PH5TYPE>(1).stringify().c_str()); ASSERTEQUALS("i", Complex<PH5TYPE>(0, 1).stringify().c_str()); ASSERTEQUALS("-i", Complex<PH5TYPE>(0, -1).stringify().c_str()); ASSERTEQUALS("2i", Complex<PH5TYPE>(0, 2).stringify().c_str()); ASSERTEQUALS("-2i", Complex<PH5TYPE>(0, -2).stringify().c_str()); ASSERTEQUALS("1+i", Complex<PH5TYPE>(1, 1).stringify().c_str()); ASSERTEQUALS("1-i", Complex<PH5TYPE>(1, -1).stringify().c_str()); ASSERTEQUALS("1+2i", Complex<PH5TYPE>(1, 2).stringify().c_str()); ASSERTEQUALS("1-2i", Complex<PH5TYPE>(1, -2).stringify().c_str()); ASSERTEQUALS("1.2-5.7i", Complex<PH5TYPE>(1.2345, -5.6789).stringify(1).c_str()); ASSERTEQUALS("1.0+1.0i", Complex<PH5TYPE>(0.99, 0.99).stringify(1).c_str()); ASSERTEQUALS("1.0-1.0i", Complex<PH5TYPE>(0.99, -0.99).stringify(1).c_str()); ASSERTEQUALS("0.99-0.99i", Complex<PH5TYPE>(0.99, -0.99).stringify(2).c_str()); c13.assertEqualT(Complex<PH5TYPE>(1.0009, 2.9991), 0.001); cout << "TEST : test_Complex() OK" << endl; }