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

Вниз

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

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

Наверх




Память: 0.5 MB
Время: 0.036 c
1-1102580428
Dysan
2004-12-09 11:20
2004.12.26
обратиться к процедуре зная только название в текстовом формате!


1-1102528136
Руслана
2004-12-08 20:48
2004.12.26
Перестала запускаться Delphi7


1-1102807915
SergP
2004-12-12 02:31
2004.12.26
Проблема с TXMLDocument


14-1102215968
Думкин
2004-12-05 06:06
2004.12.26
С днем рождения! 5 декабря


10-1067872500
dmuv
2003-11-03 18:15
2004.12.26
idl2pas и ее встроенность в Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский