Главная страница
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.016 c
2-1244796506
b/@.
2009-06-12 12:48
2009.08.16
Как правильно определять версию файла ?


2-1245401116
Nil
2009-06-19 12:45
2009.08.16
как проверить наличие свойства компонента


15-1245232625
@!!ex
2009-06-17 13:57
2009.08.16
Средства улучшения работы в Visual Studio


2-1245237512
TheEd
2009-06-17 15:18
2009.08.16
Как принудительно "убить" InplaseEditor в StringGride


2-1245142539
vitalik200888
2009-06-16 12:55
2009.08.16
печать из delphi.