![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
элипс по Polyline
dzmitry_ © (2003-09-12 16:42:00)
такой хитрый вопрос, нужна замкнутая кривая, качающаясяя центам линий по Polyline...
кривые Безье немного не подходят, существует ли такой алгоритм?
или всё таки использвать стандарт?
ZEE (2003-09-23 14:47:00) [1]
точно не знаю - не пользовал, но что-то типа Polygon надо
dzmitry_ (2003-09-23 10:16:00) [2]
>ZEE © (22.09.03 13:05) [10]
вот теперь спасибо!
наконецто у меня получилось эта сложная и замкнутая кривая которую я хотел...
правда код получился довольно большой...
теперь осталось только подумать как сделать не только линию, но и закрашенный контур на основе этой линии...
ZEE (2003-09-22 13:05:00) [3]
кстати линии безье (PolyBezier) рисует хитро и просто расставив точки по кругу - не подойдет
см. например рисование дуги берем точку1 и точку2 - между ними надо нарисовать дугу, но надо еще знать куда искривляться будет дуга
поэтому надо брать три точки т1, т2, т3
а теперь пробуем продолжить рисовать уту дугу до полукруга - добавляем еще одну точку т4, но опять не то дуга будет дорисовываться так т2, т3 (искревление), т4 - а надо бы т3, т4 (искревление), т5
Поэтому я круги (элипсы) с пом. Безье рисую из четырех дуг:
ArcPts:array[0..4]of TPoint;
...
ArcPts[0]:=Point(round(x1),round(y1));
ArcPts[1]:=Point(round(x1),round(y1));// этот тот самый повтор
ArcPts[2]:=Point(round(x2),round(y2));
ArcPts[3]:=Point(round(x3),round(y3));
ArcPts[4]:=Point(round(x3),round(y3));// еще повтор
PolyBezier(DC1,ArcPts,4);//дуга 1
// а дальше еще три дуги но с перерасчитанными точками
dzmitry_ (2003-09-22 10:59:00) [4]
>да еще надо кол-во точек делать +2 от нужного - так чтобы
>у точек 1 и 2 (n и n-1) координаты совпадали
увы, бейзера линии как то не воспринимают это, ничего не выводится... видно неправильно точки расположены (хотя странно - все они расположены вроде по кругу, и проблем не должно быть...)
dzmitry_ (2003-09-17 13:48:00) [5]
>Так если тебе эллипс надо - почему бы и не нарисовать Ellipse?
я>т.е. частный случай - в прямоугольнике выводиться эллипс...
но могут быть и другие варианты конечно...
>в PolyBezier() надо массив точек подставить с правильно
>рассчитанными координатами
насчёт правильно рассчитаных координат не знаю увы, ввод данных осуществляется пользователем, а как известно, они могут такого начудить...
>да еще надо кол-во точек делать +2 от нужного - так чтобы
>у точек 1 и 2 (n и n-1) координаты совпадали
за такой совет спасибо, надо будет попробовать...
MBo (2003-09-15 13:51:00) [6]
>надо поворачивать эллипс
4 безье, аффинное пребразование контр. точек.
ZEE (2003-09-15 13:33:00) [7]
>dzmitry_ (15.09.03 12:54) [4]
>кривой безье нормальную замкнутую фигуру не получается, особенно на элипс
"не получается" - не значит "не возможно"...
в PolyBezier() надо массив точек подставить с правильно рассчитанными координатами
да еще надо кол-во точек делать +2 от нужного - так чтобы у точек 1 и 2 (n и n-1) координаты совпадали
и я так понимаю Ellipse не подходит - т.к. надо поворачивать эллипс...
кстати можешь посмотреть мой скринсейвер, в кот. как раз PolyBezier используется
http://zee.by.ru/download/zsaverring.zip(~30K)
так что безье работают...
MBo (2003-09-15 13:08:00) [8]
одной кривой - конечно, нельзя. а вот если кривых - по числу сторон - все нормально.
Так если тебе эллипс надо - почему бы и не нарисовать Ellipse?
dzmitry_ (2003-09-15 12:54:00) [9]
всё выходные с Безье промучался, увы кривой безье нормальную замкнутую фигуру не получается, особенно на элипс... есть другие варианты?
MBo (2003-09-12 17:10:00) [10]
Безье прекрасно подходит, если многоугольник выпуклый, иначе могут быть петли.
dzmitry_ (2003-09-12 17:04:00) [11]
ошибочка, замкнутая кривая, которая касается центра линий обьекта Polyline... т.е. частный случай - в прямоугольнике выводиться эллипс...
MBo (2003-09-12 16:44:00) [12]
>замкнутая кривая, качающаясяя центам линий по Polyline
переведи