در این سری آموزشی، با استفاده از openGL، روابط مثلثاثی و توابع آن (سینوس، کسینوس، تانژانت و...) و کتابخانه cmath کد نویسی خواهیم کرد.

در بخش اول با کمک نقاط A و B و C مثلثی را رسم کرده، طول فاصله‌ی نقاط را بدست آورده و سپس زوایای مثلث را محاسبه می‌کنیم. همچنین برای بدست آوردن زوایای مربوط از تابع معکوس کسینوس (reverse cosine) استفاده می‌شود.

برنامه‌ای که مینویسیم به گونه‌ای خواهد بود که کار بر با کلیلک کردن بر صفحه، نزدیکترین نقطه (از نقاط A, B, C) به موقعیت نشانگر تغییر مکان خواهد داد. سپس در محیط کنسول، طول پاره خط‌های AB, BC و CA و همیچنین زوایای نقاط A و B و C چاپ خواهد شد.

واحدهای اندازه‌گیری تماماً بر مبنای پیکسل است.

 

void mouse (int btn, int state, int x, int y)
{
    switch (state)
    {
    case GLUT_DOWN:
        if (btn == GLUT_RIGHT_BUTTON)
            exit(0);
        else if (btn == GLUT_LEFT_BUTTON)
        {
            dot1_distance = sqrt (pow((trianglePos[0]-x), 2) + pow((trianglePos[1]-y), 2));
            dot2_distance = sqrt (pow((trianglePos[2]-x), 2) + pow((trianglePos[3]-y), 2));
            dot3_distance = sqrt (pow((trianglePos[4]-x), 2) + pow((trianglePos[5]-y), 2));

            if (dot1_distance < dot2_distance && dot1_distance < dot3_distance)
                pos = 1;
            else if (dot2_distance < dot1_distance && dot2_distance < dot3_distance)
                pos = 2;
            else if (dot3_distance < dot1_distance && dot3_distance < dot2_distance)
                pos = 3;


            if (pos == 1)
            {
                trianglePos[0] = x;
                trianglePos[1] = y;
            }
            else if (pos == 2)
            {
                trianglePos[2] = x;
                trianglePos[3] = y;
            }
            else if (pos == 3)
            {
                trianglePos[4] = x;
                trianglePos[5] = y;
            }
            
            AB = sqrt (pow((trianglePos[2]-trianglePos[3]), 2) + pow((trianglePos[4]-trianglePos[5]), 2));
            BC = sqrt (pow((trianglePos[4]-trianglePos[5]), 2) + pow((trianglePos[0]-trianglePos[1]), 2));
            CA = sqrt (pow((trianglePos[0]-trianglePos[1]), 2) + pow((trianglePos[2]-trianglePos[3]), 2));
            
            A = acos((pow(BC, 2) + pow(CA, 2) - pow (AB, 2))/(2*BC*CA)) * 180 / 3.1415;
            B = acos((pow(AB, 2) + pow(CA, 2) - pow (BC, 2))/(2*AB*CA)) * 180 / 3.1415;
            C = acos((pow(AB, 2) + pow(BC, 2) - pow (CA, 2))/(2*AB*BC)) * 180 / 3.1415;

            system ("cls");
            cout    << "mouse x: " << x << " | mouse y: " << y << endl
                    << "AB: " << AB << " | BC: " << BC << " | CA: " << CA << endl
                    << "A: " << A << " | B: " << B << " | C: " << C << ends;
        }
    break;
    }
}


منبع: cppdev.blog.ir

منبع آن وبلاگ cppdev.blog.ir می باشد.