Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

элипс по 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
переведи


Наверх

Титульная страница Поиск, карта сайта Написать письмо