Эффективная растрирование сплайном-полигоном - PullRequest
1 голос
/ 10 апреля 2020

Я ищу эффективный алгоритм и / или код для растеризации изогнутых многоугольников. В лучшем случае такой алгоритм будет поддерживать сглаживание с точностью до субпикселя. Моя цель - понять и реализовать такой алгоритм в c ++.

Алгоритм Point-In-Spline-Polygon Вот код для определения, находится ли точка внутри такого изогнутого многоугольника, и, конечно, один может использовать грубую силу, чтобы растеризовать это, но это будет слишком медленно.

По существу мне нужен быстрый код на С ++ для создания изображений, представленных в этой статье.

Код грубой силы будет выглядеть примерно так:

// draw a single pixel at x,y coordinates.
void draw_pixel(int x, int y, int coverage);

// slow code without anti-aliasing 
void brute_force(int x_res, int y_res, double *poly) {
    for(int y = 0; y < y_res; ++y) {
        const double fy = double(y);
        for(int x = 0; x < x_res; ++x) {
            const double fx = double(x);
            if (pointInSplinePoly(poly, fx, fy)) {
                draw_pixel(x,y, 0xFF);
            }
        }
    }
}

Здесь медленно код с 2x2 сглаживания.

...