Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
14-1134862849
Германн
2005-12-18 02:40
2006.01.15
Архивы форума за май 2005


14-1135156839
Empleado
2005-12-21 12:20
2006.01.15
В Саранске создается цифровое телевещание


14-1135150795
Bless
2005-12-21 10:39
2006.01.15
hh.exe в папке c: windows?


14-1134990696
КаПиБаРа
2005-12-19 14:11
2006.01.15
Посмотрел вчера программу Время


3-1132214943
Левощенко
2005-11-17 11:09
2006.01.15
Объясните мне разницу, по join