Главная страница
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
2-1245577497
Bred
2009-06-21 13:44
2009.08.16
Цвет шрифта при использовании TextOut


2-1245521966
bred
2009-06-20 22:19
2009.08.16
ошибка при объявлении процедуры


15-1245117148
brother
2009-06-16 05:52
2009.08.16
функция Exel


1-1211907969
Smart
2008-05-27 21:06
2009.08.16
Нужен алгоритм.


3-1225978813
Aristarh
2008-11-06 16:40
2009.08.16
Обработка подключения когда недоступен удаленный сервер БД.