Пример #1
0
int main(int argc, const char **argv){
    if (argc != 3 && argc != 5){
        printf("Usage: prog sides num_blanks [wid hei]\n");
        return 1;
    }
    size_t blanks = atol(argv[2]);
    size_t sides = atol(argv[1]);
    size_t wid = DEFAULT_WIDTH;
    size_t hei = DEFAULT_HEIGHT;

    if (argc == 5){
        wid = atol(argv[3]);
        hei = atol(argv[4]);
    }

    sierp2d::Model<double, ModelType, GridType> model;
    for (int blank=0; blank < blanks; ++blank){
        model.points.push_back(sierp2d::Point<double>(wid/2, hei/2)); 
    }
    model.add_regular(wid, hei, sides);

    GridType * front = new GridType( {wid, hei} );
    GridType *  back = new GridType( {wid, hei} );
    GridType * temp = NULL;

    front->get_point({wid/2, hei/2}) = INITIAL;

    while (true){
        bool hit_max = model.next(*front, *back);
        if (hit_max) break;
        temp = back;
        back = front;
        front = temp;
    }
    temp = NULL;
    delete back;

    ModelType maxval = front->max();
    double scale = UIMAX(ModelType) / ((double)maxval);
    for (ModelType &val : *front){
        val *= scale;
    }
    front->invert();

    char file_name[255];
    sprintf(file_name, "out-%zu-%zu.png", blanks, sides);
    
    png::write(*front, file_name);
    delete front;
}