Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.088 c
2-1245577497
Bred
2009-06-21 13:44
2009.08.16
Цвет шрифта при использовании TextOut


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


2-1245399366
parasolka
2009-06-19 12:16
2009.08.16
Зафиксировать размаер панели.


15-1245123478
DelphiN!
2009-06-16 07:37
2009.08.16
Установка новых устройств под учеткой с правами пользователя


3-1226010464
DOjD
2008-11-07 01:27
2009.08.16
Как определить происходит ли выборка данных запросом или нет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский