Пример #1
0
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);
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
Complex Complex::operator-(Complex& theComplex)
{
	this->real -= theComplex.Re();
	this->imaginary -= theComplex.Im();
	return *this;
}
Пример #6
0
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;
}