Пример #1
0
/* Works out if there are 1 or 3 real roots of the equation, then
   computes the values of the roots. */
void find_roots(float a1, float a2, float a3) {
	float q, s;

	q = (powf(a1, 2) - 3*a2)/9;
	s = (2*powf(a1, 3) - 9*a1*a2 + 27*a3)/54;
	// printf("Q = %.4f, S = %.4f\n", q, s);

	if (powf(q, 3) - powf(s, 2) > 0){ // If there are three real roots
		float theta, x1, x2, x3;

		theta = acosf(s/sqrtf(powf(q, 3)));
		x1 = -2 * sqrtf(q) * cosf(theta/3) - a1/3; //first root
		x2 = -2 * sqrtf(q) * cosf((theta + 2*PI)/3) - a1/3; //second root
		x3 = -2 * sqrtf(q) * cosf((theta + 4*PI)/3) - a1/3; //third root

		printf("There are three real roots: %.3f, %.3f and %.3f.\n", x1, x2, x3);
		test_cubic(a1, a2, a3, x1);
		test_cubic(a1, a2, a3, x2);
		test_cubic(a1, a2, a3, x3);
	}
	
	else if (powf(q, 3) - powf(s, 2) <= 0){ // Else if there is only one real root.
		float a, sign, x1;
		
		if (fabsf(s) < 0.000001) { // if S is equal to 0.
			sign = 0;
		}
		else if (s > 0) {
			sign = -1;
		}
		else if (s < 0) {
			sign = 1;
		}
		
		a = sign * powf((sqrtf(powf(s, 2) - powf(q, 3)) + fabsf(s)), 1/3);
		
		if (fabsf(a) > 0.000001) { // i.e if a does not equal 0
			x1 = a + q/a - a1/3;
		}
		else {
			x1 = a - a1/3;
		}

		printf("There is one real root: %.3f\n", x1);
		test_cubic(a1, a2, a3, x1);
	}
}
Пример #2
0
int main()
{
	test_square();
	test_triangular();
	test_hexagonal();
	test_cubic();


	return 0;
}
Пример #3
0
    void init() {
        if (fOnce) {
            return;
        }
        fOnce = true;

        test_cubic();
        test_cubic2();

        fShowHairline = false;

        fDStroke = 1;
        fStroke = 10;
        fMinStroke = 10;
        fMaxStroke = 180;

        const int V = 85;

        fPath[0].moveTo(SkIntToScalar(40), SkIntToScalar(70));
        fPath[0].lineTo(SkIntToScalar(70), SkIntToScalar(70) + SK_Scalar1/1);
        fPath[0].lineTo(SkIntToScalar(110), SkIntToScalar(70));

        fPath[1].moveTo(SkIntToScalar(40), SkIntToScalar(70));
        fPath[1].lineTo(SkIntToScalar(70), SkIntToScalar(70) - SK_Scalar1/1);
        fPath[1].lineTo(SkIntToScalar(110), SkIntToScalar(70));

        fPath[2].moveTo(SkIntToScalar(V), SkIntToScalar(V));
        fPath[2].lineTo(SkIntToScalar(50), SkIntToScalar(V));
        fPath[2].lineTo(SkIntToScalar(50), SkIntToScalar(50));

        fPath[3].moveTo(SkIntToScalar(50), SkIntToScalar(50));
        fPath[3].lineTo(SkIntToScalar(50), SkIntToScalar(V));
        fPath[3].lineTo(SkIntToScalar(V), SkIntToScalar(V));

        fPath[4].moveTo(SkIntToScalar(50), SkIntToScalar(50));
        fPath[4].lineTo(SkIntToScalar(50), SkIntToScalar(V));
        fPath[4].lineTo(SkIntToScalar(52), SkIntToScalar(50));

        fPath[5].moveTo(SkIntToScalar(52), SkIntToScalar(50));
        fPath[5].lineTo(SkIntToScalar(50), SkIntToScalar(V));
        fPath[5].lineTo(SkIntToScalar(50), SkIntToScalar(50));

        this->setBGColor(0xFFDDDDDD);
    }
Пример #4
0
    void init() {
        if (fOnce) {
            return;
        }
        fOnce = true;

        test_cubic();
        test_cubic2();

        fShowHairline = false;

        fDStroke = 1;
        fStroke = 10;
        fMinStroke = 10;
        fMaxStroke = 180;

        const SkScalar V = 85;

        fPath[0].moveTo(40, 70);
        fPath[0].lineTo(70, 70 + SK_ScalarHalf);
        fPath[0].lineTo(110, 70);

        fPath[1].moveTo(40, 70);
        fPath[1].lineTo(70, 70 - SK_ScalarHalf);
        fPath[1].lineTo(110, 70);

        fPath[2].moveTo(V, V);
        fPath[2].lineTo(50, V);
        fPath[2].lineTo(50, 50);

        fPath[3].moveTo(50, 50);
        fPath[3].lineTo(50, V);
        fPath[3].lineTo(V, V);

        fPath[4].moveTo(50, 50);
        fPath[4].lineTo(50, V);
        fPath[4].lineTo(52, 50);

        fPath[5].moveTo(52, 50);
        fPath[5].lineTo(50, V);
        fPath[5].lineTo(50, 50);

        this->setBGColor(0xFFDDDDDD);
    }
Пример #5
0
	PathView() {
        test_cubic();
        test_cubic2();

        fShowHairline = false;
        
        fDStroke = 1;
        fStroke = 10;
        fMinStroke = 10;
        fMaxStroke = 180;

        const int V = 85;
        
        fPath[0].moveTo(SkIntToScalar(40), SkIntToScalar(70));
        fPath[0].lineTo(SkIntToScalar(70), SkIntToScalar(70) + SK_Scalar1/1);
        fPath[0].lineTo(SkIntToScalar(110), SkIntToScalar(70));
        
        fPath[1].moveTo(SkIntToScalar(40), SkIntToScalar(70));
        fPath[1].lineTo(SkIntToScalar(70), SkIntToScalar(70) - SK_Scalar1/1);
        fPath[1].lineTo(SkIntToScalar(110), SkIntToScalar(70));
        
        fPath[2].moveTo(SkIntToScalar(V), SkIntToScalar(V));
        fPath[2].lineTo(SkIntToScalar(50), SkIntToScalar(V));
        fPath[2].lineTo(SkIntToScalar(50), SkIntToScalar(50));
        
        fPath[3].moveTo(SkIntToScalar(50), SkIntToScalar(50));
        fPath[3].lineTo(SkIntToScalar(50), SkIntToScalar(V));
        fPath[3].lineTo(SkIntToScalar(V), SkIntToScalar(V));
        
        fPath[4].moveTo(SkIntToScalar(50), SkIntToScalar(50));
        fPath[4].lineTo(SkIntToScalar(50), SkIntToScalar(V));
        fPath[4].lineTo(SkIntToScalar(52), SkIntToScalar(50));
        
        fPath[5].moveTo(SkIntToScalar(52), SkIntToScalar(50));
        fPath[5].lineTo(SkIntToScalar(50), SkIntToScalar(V));
        fPath[5].lineTo(SkIntToScalar(50), SkIntToScalar(50));
    }