Exemple #1
0
void testCases(FILE *ptr_input, FILE *ptr_output){
 char buffer[1000], space[2] = " ";
 int num_test_cases = 0, case_num = 1;
 char *output = (char*) malloc(50);

 if(fgets(buffer, 1000, ptr_input)!=NULL){
  num_test_cases = atoi(buffer);
  printf("%d test cases:\n",num_test_cases);
 }
 
 
 while(case_num<=num_test_cases&&fgets(buffer,1000,ptr_input)!=NULL){
  int first_answer, second_answer, i=1,j=0;
  int first_row [5], second_row[5];
  //read input

  first_answer = atoi(buffer);
  while(i<=4){
   fgets(buffer,1000,ptr_input);
   if(i==first_answer){
    lineToArray(buffer,first_row,4);
   }
   i++;
  }


  fgets(buffer,1000,ptr_input);
  i=1,j=0;
  second_answer = atoi(buffer);
  while(i<=4){
   fgets(buffer,1000,ptr_input);  
   if(i==second_answer){
    lineToArray(buffer,second_row,4);
   }
   i++;
  }

  //process data
  processData(first_row,second_row,output);
  
  //write output
  fprintf(ptr_output,"Case #%d: %s\n",case_num, output);  

  case_num++;
 }
 free(output);
}
void QGL2PEXVertexArray::addPath(const QVectorPath &path, GLfloat curveInverseScale, bool outline)
{
    const QPointF* const points = reinterpret_cast<const QPointF*>(path.points());
    const QPainterPath::ElementType* const elements = path.elements();

    if (boundingRectDirty) {
        minX = maxX = points[0].x();
        minY = maxY = points[0].y();
        boundingRectDirty = false;
    }

    if (!outline && !path.isConvex())
        addCentroid(path, 0);

    int lastMoveTo = vertexArray.size();
    vertexArray.add(points[0]); // The first element is always a moveTo

    do {
        if (!elements) {
//             qDebug("QVectorPath has no elements");
            // If the path has a null elements pointer, the elements implicitly
            // start with a moveTo (already added) and continue with lineTos:
            for (int i=1; i<path.elementCount(); ++i)
                lineToArray(points[i].x(), points[i].y());

            break;
        }
//         qDebug("QVectorPath has element types");

        for (int i=1; i<path.elementCount(); ++i) {
            switch (elements[i]) {
            case QPainterPath::MoveToElement:
                if (!outline)
                    addClosingLine(lastMoveTo);
//                qDebug("element[%d] is a MoveToElement", i);
                vertexArrayStops.add(vertexArray.size());
                if (!outline) {
                    if (!path.isConvex()) addCentroid(path, i);
                    lastMoveTo = vertexArray.size();
                }
                lineToArray(points[i].x(), points[i].y()); // Add the moveTo as a new vertex
                break;
            case QPainterPath::LineToElement:
//                qDebug("element[%d] is a LineToElement", i);
                lineToArray(points[i].x(), points[i].y());
                break;
            case QPainterPath::CurveToElement: {
                QBezier b = QBezier::fromPoints(*(((const QPointF *) points) + i - 1),
                                                points[i],
                                                points[i+1],
                                                points[i+2]);
                QRectF bounds = b.bounds();
                // threshold based on same algorithm as in qtriangulatingstroker.cpp
                int threshold = qMin<float>(64, qMax(bounds.width(), bounds.height()) * 3.14f / (curveInverseScale * 6));
                if (threshold < 3) threshold = 3;
                qreal one_over_threshold_minus_1 = qreal(1) / (threshold - 1);
                for (int t=0; t<threshold; ++t) {
                    QPointF pt = b.pointAt(t * one_over_threshold_minus_1);
                    lineToArray(pt.x(), pt.y());
                }
                i += 2;
                break; }
            default:
                break;
            }
        }
    } while (0);

    if (!outline)
        addClosingLine(lastMoveTo);
    vertexArrayStops.add(vertexArray.size());
}