Вот код этой функции:
| Код | void OGLMax::CalcBezier(double x1, double y1, double x2, double y2,double x3, double y3, double x4, double y4) { //Внутренняя, рекурсивная функция, расчёта кривой Безье, 3-го порядка./ //Перед использыванием, необходимо вызвать glBegin(GL_LINES); //После glEnd();
//Пример использования: //glBegin(GL_LINES); // CalcBezier(x1,y1,x2,y2,x3,y3,x4,y4); //glEnd(); __try { double A = y4 - y1; double B = x1 - x4; double C = y1 * (x4-x1) - x1 * ( y4-y1); // Ax + By + C = 0 - линия (x1,y1) - (x4,y4) double AB = A * A + B * B; // Расстояние от (x2,y2) до линии меньше 1 // Расстояние от (x3,y3) до линии меньше 1 double D1,D2; D1=( A * x2 + B * y2 + C ) * ( A * x2 + B * y2 + C ); D2=( A * x3 + B * y3 + C ) * ( A * x3 + B * y3 + C ); if ( D1<AB) if ( D2<AB) { glVertex2i(x1,y1); glVertex2i(x4,y4);
return; } double x12 = x1+x2; double y12 = y1+y2; double x23 = x2+x3; double y23 = y2+y3; double x34 = x3+x4; double y34 = y3+y4; double x1223 = x12+x23; double y1223 = y12+y23; double x2334 = x23+x34; double y2334 = y23+y34; double x = x1223 + x2334; double y = y1223 + y2334; CalcBezier(x1, y1, x12/2, y12/2, x1223/4, y1223/4, x/8, y/8); CalcBezier(x/8, y/8, x2334/4, y2334/4, x34/2, y34/2, x4, y4); }
__except(EXCEPTION_EXECUTE_HANDLER ) {
//обработка искючения //скажите пожалуйста как в данной ситуации обрабатывать исключение} } }
| |