Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

Помогите теорией. Полигон по направляющей полилинии.   Найти похожие ветки 

 
Knight ©   (2009-06-15 10:02) [0]

Как построить полигон по направляющей полилинии с заданным отступом от неё с обоих сторон (аля дорога) ?


 
oldman ©   (2009-06-15 10:14) [1]

Линия ломаная или плавная?
Если ломаная - делим на отрезки, проводим перпендикуляры, отмеряем отступ, строим полигон.


 
Как-то так   (2009-06-15 10:17) [2]

Используй векторное произведение - CrossVector


 
Как-то так   (2009-06-15 10:18) [3]

aka Cross product


 
Knight ©   (2009-06-15 10:19) [4]

Ломаная. А на стыках как? И можно ли это как-то проще строить... типа матриц?


 
oldman ©   (2009-06-15 10:26) [5]


> Knight ©   (15.06.09 10:19) [4]
> Ломаная. А на стыках как?


А на стыках само пересечется.


 
Knight ©   (2009-06-15 10:30) [6]

Я так понимаю, что ширину полигона надо отмерять по перпендикулярам, а точки узлов располагать на биссектрисах...


 
oldman ©   (2009-06-15 11:23) [7]


> Knight ©   (15.06.09 10:30) [6]


Точки узлов найдутся сами собой

..........................
________________  .
........................  \  .
                        .  \  .
                          .  \  .


 
Knight ©   (2009-06-15 12:01) [8]

Надо вариант второй - нижний

http://dreams-digitizer.ru/files/Poligon.jpg


 
boa_kaa ©   (2009-06-15 12:06) [9]

с отступом уже объяснили, получаешь уравнения прямых, а затем ищешь точки пересечения


 
MBo ©   (2009-06-15 13:52) [10]

Нечто подобное нужно?

procedure TForm2.Button23Click(Sender: TObject);
var
 pn: THandle;
 lb: TLogBrush;
begin
 lb.lbStyle := BS_SOLID;
 lb.lbColor := clRed;
 pn := ExtCreatePen(PS_GEOMETRIC or PS_ENDCAP_SQUARE or PS_JOIN_MITER, 30, lb, 0, Nil);
 Canvas.Pen.Handle := pn;
 SetMiterLimit(Canvas.Handle, 2, Nil);
 BeginPath(Canvas.Handle);
 Canvas.Polyline([Point(100, 100), Point(200, 100), Point(300, 200), Point(400, 150)]);
 EndPath(Canvas.Handle);
 WidenPath(Canvas.Handle);
 Canvas.Pen.Color := clBlack;
 Canvas.Pen.Width:= 1;
 StrokePath(Canvas.Handle);
 Canvas.Polyline([Point(100, 100), Point(200, 100), Point(300, 200), Point(400, 150)]);
end;


Если нужно описание полученного полигона, то GetPath


 
Sapersky   (2009-06-15 13:57) [11]

см. Graphics32


 
Knight ©   (2009-06-15 15:39) [12]


> MBo ©   (15.06.09 13:52) [10]

а почему там какие-то петли внутри?


 
MBo ©   (2009-06-15 15:48) [13]

>а почему там какие-то петли внутри?
криво работает WidenPath (Фень Юань в своей книжке это отмечает).

Если нет сложных мест (например, омега-образных петель размера меньшего ширины отступа), то по совету oldman-а все нормально получится, и не слишком сложно



Страницы: 1 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-1211986288
Kolan
2008-05-28 18:51
2009.08.16
Относительный резайз


15-1244878087
Unknown user
2009-06-13 11:28
2009.08.16
Декомпозиция полигона на треугольники


15-1244775180
TUser
2009-06-12 06:53
2009.08.16
Является ли Земля небесным телом?


2-1245321293
Franzy
2009-06-18 14:34
2009.08.16
Always on top в пределах одного приложения


2-1245298026
novai
2009-06-18 08:07
2009.08.16
Как изменить цвет полос прокрутки в TRichEdit?