Главная страница
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.02 c
15-1244722907
ms1
2009-06-11 16:21
2009.08.16
Нагрузка на сервер Web


15-1245079850
Cyrax
2009-06-15 19:30
2009.08.16
В каких случаях...


1-1211994583
Alexander
2008-05-28 21:09
2009.08.16
Ввод функции через TEdit


2-1245310635
wordmen
2009-06-18 11:37
2009.08.16
Как удалить символы перевода строки в Memo


3-1225817639
pushkin42
2008-11-04 19:53
2009.08.16
Incorrect values within SQLDA structure при выполнении запроса