Алгоритм кастельжо это - практический пример
У меня есть набор данных с примерно 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));
}
Отсюда: