Алгоритм Кастеляу - практический пример - PullRequest
10 голосов
/ 08 июня 2011

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

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

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

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

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

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

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

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

спасибо.

1 Ответ

14 голосов
/ 08 июня 2011

Как насчет 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...