Текущий архив: 2006.01.15;
Скачать: CL | DM;
Вниз
Кривые Найти похожие ветки
← →
Juk (2005-12-24 16:24) [0]Уважаемые мастера, подскажите как обвести несколько точек плавной линией. Кривые Безье для этого не подходят, т.к. требуют дополнительных вычислений и некорректно себя ведут в случае наличия ровных участков.
← →
MBo © (2005-12-24 17:57) [1]> Кривые Безье для этого не подходят,
Других графических примитивов для рисования кривых в GDI нет
> т.к. требуют дополнительных вычислений и некорректно себя ведут в случае наличия ровных участков.
;)
← →
palva © (2005-12-24 22:41) [2]А почему кривые Безье некорректно себя ведут? Тем более на ровных участках. Если правильно задать параметры, то можно нарисовать хоть прямую линию.
← →
Juk (2005-12-24 23:06) [3]2palva
Кривые Безье так себя ведут потому что им не достаточно только узловых точек для того чтобы для описания линии, которая бы обводила эти самые точки.
Если есть идеи по поводу алгоритма отыскания дополнительных точек прошу подулиться.
← →
palva © (2005-12-25 01:08) [4]А какой здесь алгоритм? Выходим из первой точки приходим в четвертую. Из первой точки выходим по направлению ко второй точке, а в четвертую приходим по направлению из третьей точки. Если увеличивать расстояние контрольной точки от основной, то прямая при выходе будет сильнее прижиматься к отрезку проведенному из основной к контрольной. Провели одну кривую по четырем точкам, далее четвертая точка становится первой добавляются еще три точки и проводится следующая кривая и т. д. Вот закругленный угол: горизонтальный и вертикальный участок являются прямыми, между ними закругление.
procedure TForm1.Button1Click(Sender: TObject);
const
c: array [0..9] of TPoint = (
(X:20; Y:10), (X:10; Y:10), (X:200; Y:10),
(X:190; Y:10), (X:200; Y:10), (X:200; Y:10),
(X:200; Y:20), (X:200; Y:10), (X:200; Y:200),
(X:200; Y:210));
begin
Canvas.PolyBezier(c);
end;
← →
Juk (2005-12-25 19:14) [5]2palva
А кто из этих точек "основные"? Дело в том, что по данному описанию построения необходимо 4+3=7 точек, а используется 10.
← →
palva © (2005-12-25 19:56) [6]необходимо 4+3=7 точек, а используется 10
В примере рисуется три кривых (две прямых и одно закругление). Поэтому 10 точек.
← →
Думкин © (2005-12-26 05:42) [7]Сплайны ( в частности и Безье) как раз и предполагают обвод нескольких точек плавной линией. Поэтому проблема - не в их недостатках.
← →
Juk (2005-12-27 02:54) [8]2palva
К вопросу об основных точках. В описании [4] фигурирует 7 точек. В [6] говорится о трех кривых, для построения которых необходимо 2+3+2=7 точек. Значит, из указанных в [4] 10 точек 3 контрольные. Нельзя ли указать какие именно?
← →
MBo © (2005-12-27 07:34) [9]Кривые Безье - параметрические кубические кривые. Нужно формализовать задачу проведения "плавной кривой". Обычно это делается расчетом коэффициентов для одного из типов кубических сплайнов - например, интерполирующего, обеспечивающего гладкость второго порядка, либо простенького Кэтмулл-Рома, обеспечивающего первый порядок гладкости и т.д. Затем можно произвести переход от степенного базиса к базису полиномов Бернштейна (для Безье). В принципе, можно сразу описать нужные соотношения (минимально - согласование значений в узлах и производных) и разрешить уравнения (систему) относительно коэффиц. Безье, однако для вышеказанных сплайнов нетрудно найти уже готовые решения.
← →
palva © (2005-12-27 15:22) [10]> В [6] говорится о трех кривых, для построения которых необходимо 2+3+2=7 точек.
Для построение трех кривых необходимо 10 точек. Для построения одной кривой нужно 4 точки. Кривая выходит из первой точки в четвертую, 2 и 3-я - контрольные. Если вторая кривая должна продолжать первую, то первая точка второй кривой должна совпадать с четвертой точкой первой кривой. Таким образом для определения второй кривой нужно указать три новых точки, две из них будут контрольные, а последняя - та точка в которой закончится вторая кривая. Каждая следующая кривая добавляет еще три точки. Для трех кривых нужно десять точек. Совокупная кривая будет проходить через 1, 4, 7 и 10-ю точку, остальные точки контрольные. Такой массив надо подготовить для метода PolyBezier. По размеру массива метод поймет сколько звеньев кривой требуется. Почитайте help по этому методу и поэкспериментируйте с ним.
Страницы: 1 вся ветка
Текущий архив: 2006.01.15;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.052 c