Алгоритм кастельжо это - практический пример

У меня есть набор данных с примерно 50 точками (x,y), и я хотел бы нарисовать гладкую кривую, которая может пройти как можно ближе к этим точкам.

Я слышал об алгоритме Casteljau для сплайнов, но после нескольких часов поиска в google я не смог найти ни одного фрагмента кода, который я могу использовать.

насколько я понял, чтобы использовать этот алгоритм, я должен разделить свой набор данных на группы из 4 точек, верно? 1234 5678 etc.. и насколько я заметил, моя единственная проблема найти точки в середине каждой группы. Я имею в виду, если я вычисляю кривую для точек 1234, у меня уже есть точки 1 и 4, и мне нужно вычислить 2 и 3, верно? Но для меня загадка, как это сделать.

Я хотел бы спросить вас, ребята, знаете ли вы какой-то код на C, C++ или Objective-C, который вычисляет кривые на основе наборов данных с любым количеством чисел.

Что мне нужно: я отправляю код массив с набором данных, и я получаю обратно массив с точками рисовать.

моя математика ржавый. Поэтому, пожалуйста, приведите практические примеры. Не отправляйте меня на страницы с математической теорией и уравнениями. Глядя на эти страницы, у меня болит голова...

просто скажите мне, что делать с точками, которые я должен вычислить Безье.

ответ, как вы бы спросить 10-летнего ребенка... : D

спасибо.

1 ответов


Как насчет C#?

private void drawCasteljau(List<point> points) {
            Point tmp;
            for (double t = 0; t <= 1; t += 0.001) { 
                tmp = getCasteljauPoint(points.Count-1, 0, t);
                image.SetPixel(tmp.X, tmp.Y, color);
            }
        }


    private Point getCasteljauPoint(int r, int i, double t) { 
        if(r == 0) return points[i];

        Point p1 = getCasteljauPoint(r - 1, i, t);
        Point p2 = getCasteljauPoint(r - 1, i + 1, t);

        return new Point((int) ((1 - t) * p1.X + t * p2.X), (int) ((1 - t) * p1.Y + t * p2.Y));
    }

Отсюда:

http://protein.ektf.hu/book/export/html/51