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

Вниз

Площадь   Найти похожие ветки 

 
Bobby Digital ©   (2004-12-11 17:36) [0]

Есть ли в Делфи какая-нить стандартная функция которая находит площадь много угольника, если известны координаты его точек

или подскажите кто-нить формулу а то что аналитич. геометрию подзабыл


 
Arm79   (2004-12-11 17:58) [1]

я и математической то формулы не знаю, которая позволяла бы находить площадь Н-угольника в общем случае. Только частные случаи типа квадрат, треугольник. Если не нужна сверхточность, то можно использоваь метод монте-карло. Определяешь min(x), min(y), max(x), max(y), строишь прямоугольник по этим координатам (получается, что фигура будет заключена внутри прямоугольника). Пишешь функцию, которая может определять, попала ли случайно выбранная точка внутри прямоугольника внутрь Н-угольника или нет. Затем определяешь процент таких попаданий. этот процент будет являться и процентом прощади Н-угольника от площади прямоугольника. Соостветственно, чем больше точек выберешь, тем точнее результат. Распределение должно быть равномерным, поэтому стандартная фунцкция Random вполне подходит


 
TButton ©   (2004-12-11 18:52) [2]

я знаю, ибо топограф с красным дипломом, и прога у мну есть которая считает площадь N-угольника по координатам вершин *написал в свое время, чтоб лабораторные в ней считать, неплохо кстати наварился*
сейчас найду исходняки.


 
TButton ©   (2004-12-11 18:57) [3]

эээ...
давай я тебе их на мыло скину.
с тебя конверт с обратным адресом =)
вышлешь его на marcuch@yandex.ru


 
default ©   (2004-12-11 19:01) [4]

Arm79   (11.12.04 17:58) [1]
посчитать-то можно точно по-любому - есть же вроде бы методы триангуляции многоугольников(разбиения на треугольники), ну а их площадь посчитать не проблема по точкам


 
TButton ©   (2004-12-11 20:02) [5]

в двух словах:
есть n-угольник *не Игоря*
1. выписываем координаты
X[1]
X[2]
...
X[n]
X[1]

2. высчитываем приращения координат
X[1]-X[2]
X[2]-X[3]
...
X[n-1]-X[n]
X[n]-X[1]
получается n приращений координат

3. перемножаем
(X[1]-X[2])*Y[1]
(X[2]-X[3])*Y[2]
...
(X[n-1]-X[n])*Y[n-1]
(X[n]-X[1])*Y[n]
получаем n произведений

4. суммируем произведения
получаем удвоеную пложадь P2

5. делим сумму пополам
получаем площадь n-угольника *не Игоря*

знак пложади зависит от порядка в котором взяты координаты
если выписывать координаты по ходу часовой стрелки площадь получится с плюсом
против - с минусом
*или наоборот, точно не помню*
т.е. P=ABS(P2/2)


 
TButton ©   (2004-12-11 20:06) [6]

запорол п.2
должно быть так:
X[1]-X[3]
X[2]-X[4]
...
X[n-2]-X[n]
X[n-1]-X[1]


 
ECM ©   (2004-12-11 20:13) [7]

Это задача для средней школы:

procedure TRGN_Element.CalcArea;
var
 i,j: Integer;
 p0,p1: PPointF;
begin
 Area := 0;
 if fCount > 2 then begin
   for i:=0 to fCount-1 do begin
     p0 := PPointF(fOrigins+i*SizeOf(TPointF));
     j := i+1;
     if j = fCount then j := 0;
     p1 := PPointF(fOrigins+j*SizeOf(TPointF));
     Area := Area + (p1.x - p0.x)*(p1.y + p0.y);
   end;
   Area := EAbs(Area)*0.5;
 end;
end;


Это расчет площади фигуры в векторной карте (я думаю принцип достаточно прозрачен)


 
ECM ©   (2004-12-11 20:14) [8]

Сорри начал набирать - отвлекся - посты [4]-[6] не видел


 
Oitxr ©   (2004-12-11 20:32) [9]

Попробуй с помощью трапеций,составленных из вершин n-угольника.


 
jack128 ©   (2004-12-11 20:36) [10]

Oitxr ©   (11.12.04 20:32) [9]
Попробуй с помощью трапеций,составленных из вершин n-угольника


произвольный n-угольник очевидно нельзя разбить на трапеции. Берем учебник геометрии и ищем определение трапеции.


 
ECM ©   (2004-12-11 20:45) [11]

jack128 ©   (11.12.04 20:36) [10]
произвольный n-угольник очевидно нельзя разбить на трапеции
.
Гы-Гы .. Легко! И-тая трапеция ограничена сверху И-тым ребром н-угольника,снизу осью OX, две остальные стороны - перпендикуляры опущеные из вершин И-того ребра...
Это же видно из листинга [7]


 
ECM ©   (2004-12-11 20:52) [12]

З.Ы. Перпендикуляры опущены на ось OX...
И как правильно замечено в [5] часть трапеций будет со знаком "+" часть со знаком "-". После суммирования "лишняя" площадь - не входящая в многоугольник (под многоугольником до оси OX) исключается...


 
default ©   (2004-12-11 20:57) [13]

ECM ©   (11.12.04 20:13) [7]
код с j лучше за цикл вынести
что-то мне кажется что Ваш код правильно считает только тогда когда каждое ребро соприкасается один раз с осью OX


 
ECM ©   (2004-12-11 21:05) [14]

2 default ©   (11.12.04 20:57) [13]
Код абсолютно рабочий - точно так же считает программа
GPSMapEdit http://www.geopainting.com/ru/
Я сравнивал с ее исходниками (правда тогда она называлась
просто MapEdit и была фриваре-опенсорц )
А по-поводу соприкосновения - нарисуйте на бумаге многоугольник
и опустите из каждой вершины перпендикуляр на OX и присмотритесь :)


 
ECM ©   (2004-12-11 21:14) [15]

З.ы. Сорри - про GPSMapEdit немного наврал - давно не заходил
сайт переделан - так что сразу не нашел исходники (правда все равно лишь частичные ).
Так что извиняюсь перед автором :)


 
jack128 ©   (2004-12-11 21:36) [16]

ECM ©   (11.12.04 21:05) [14]
А по-поводу соприкосновения - нарисуйте на бумаге многоугольник
и опустите из каждой вершины перпендикуляр на OX и присмотритесь :)

нарисовал правельный пятиугольник. Одну из старон принял за ось OX. Провел перпендикуляры из оставшихся трех точек.  Увидел 3 трапеции.  все выходили за границы пятиугольника.

Вырежь, пожалуйста, из бумаги 5-угольник, неимеющий паралельных сторон и разрежь его на трапеции. У меня не получилось..
То ли лыжи не едут, то ли..


 
ECM ©   (2004-12-11 22:57) [17]

2 jack128 ©   (11.12.04 21:36) [16]
То ли лыжи не едут, то ли..

как говорил хрюндель - "на этом мысль останавливается...":)
Вы наверное невнимательно прочитали предыдущее...
Никто многоугольник вот так в лоб на трапеции НЕ режет.
(может я действительно не точно выразился - сорри)
Строятся трапеции как бы  ПОД многоугольником.
И одну из сторон НЕ надо принимать за ОХ а просто опустить перпендикуляры. В рез. получаться трапеции выходящие за границы
многоугольника - но суммирование их площадей дает площадь многоугольника(т.к. площади трапеций имеют разные знаки)


 
Bobby Digital ©   (2004-12-11 22:57) [18]

Спасибо всем за ответы, все работает! ;)


 
jack128 ©   (2004-12-11 23:02) [19]

ECM ©   (11.12.04 22:57) [17]
Угу, разобрались.


 
default ©   (2004-12-11 23:27) [20]

вообщем принцип можно понять тут
(вообщем интегрируем по ломаным слева направо с плюсом, справа налево с минусом дабы убить лишнюю площадь полученную на первом обходе)
http://algolist.manual.ru/maths/geom/polygon/area.php
и сравнить с Вашими программами



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

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

Наверх




Память: 0.52 MB
Время: 0.025 c
1-1102656677
onix
2004-12-10 08:31
2004.12.26
локальный вход


3-1101373424
Инког
2004-11-25 12:03
2004.12.26
table


1-1102582279
Maxim_S~~
2004-12-09 11:51
2004.12.26
прогресс при загрузке программы


4-1100379236
Velzevul
2004-11-13 23:53
2004.12.26
Hard disk size for win32


1-1102505567
Игорь нтк
2004-12-08 14:32
2004.12.26
отображение ячейки