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

Вниз

вопрос по геометрии   Найти похожие ветки 

 
beglec ©   (2005-12-08 00:31) [0]

Видимо в школе плохо учился, не помню что и как.
Подскажи, как найти площадь любого плоского объекта.
Объект может быть не только квадратом, треугольников или кругом, а может быть в различной формы - типа многоугольник.
Как показано на картинки требуется найти площадь каждого "квадрата".
www.agroecolog.hut1.ru/layer2.gif

ответик лучше с кодом, ходя теоретического объяснения будет достаточно. Возможно есть уже готовые функции, за указания пальцем на указатель функции буду признателен.


 
Джо ©   (2005-12-08 00:58) [1]

Как задается фигура? И - всегда ли это именно многоугольник - или может быть, например, эллипс?


 
Kerk ©   (2005-12-08 01:05) [2]

Разбивай многоугольник на треугольники. Найти площадь треугольника по трем координатам легко.


 
Кефир87 ©   (2005-12-08 01:06) [3]

Численное интегрирование? Хы-хы-хы 8)


 
Джо ©   (2005-12-08 01:10) [4]

Зачем такие сложности? Есть простой общий способ для любых многоугольников (без самопересечений).
Словами объяснять лень, вот простой неоптимизированный код, он предельно ясен :)

type
 TNode = record
   X,Y: Double;
 end;

 TNodes = array of TNode;

function GetSquare (Nodes: TNodes): Double;
var
 I,I_next,I_prev: Integer;
 Summ: Double;
begin
 Summ := 0;
 for I := Low (Nodes) to High(Nodes) do
 begin
   I_next := I+1;
   I_prev := I-1;
   if I_next > High(Nodes) then
     I_next := 0;
   if I_prev < 0 then
     I_prev := High(Nodes);

   Summ :=
     Summ + ( (Nodes[I_next].Y - Nodes[I_prev].Y) * Nodes[I].X );
 end;

 Result := Abs(Summ/2);
end;

Написал только-что "на колене", но долж0н работать :)


 
beglec ©   (2005-12-08 01:26) [5]

>> Джо ©   (08.12.05 00:58) [1]
Сомневаюсь, что поля в россии, да и в мире могут быть ввиде эллипса, но в нашей хреновой жизни возможно все :)

>> Kerk ©   (08.12.05 01:05) [2]
Я думал на счет этого, но как это сделать? Даже в теории продумать не могу.

>> Кефир87 ©   (08.12.05 01:06) [3]
>> Численное интегрирование? Хы-хы-хы 8)
А если на русский ? :)

>> Джо ©   (08.12.05 01:10) [4]
спасибо за примерчик, буду разбираться.
Взгляни на картинку, может еще какие идеи появятся.


 
Джо ©   (2005-12-08 01:27) [6]

[5] beglec ©   (08.12.05 01:26)
> Взгляни на картинку, может еще какие идеи появятся.

Какие идеи еще? Я же привел стандартную формулу.


 
beglec ©   (2005-12-08 01:36) [7]

да я так спросил


 
Кефир87 ©   (2005-12-08 01:43) [8]


> А если на русский ? :)


Ну в общем численное интегрирование и сводится к разделению сложных фигур на более простые и дальнейшиму подсчету площади этих простых фигур (тропеций, треугольников тех-же...). Но это все, естественно, работает с определенной точностью... Может я что-то и напутал. Ведь именно "численное интегрирование" подразумивает нахождение площади функций 8) Просто уж больно термин страшный 8)


 
uw ©   (2005-12-08 02:08) [9]

Джо ©   (08.12.05 01:10) [4]
Написал только-что "на колене", но долж0н работать :)


И в самом деле работает. Ё-о!


 
beglec ©   (2005-12-08 02:23) [10]

Я не сомневался
>> Джо ©   (08.12.05 01:27) [6]
гений ;)


 
Юрий Зотов ©   (2005-12-08 09:29) [11]

> beglec ©   (08.12.05 00:31)  

> как найти площадь любого плоского объекта.

Любой плоский объект не всегда удастся разбить на простые фигуры (например, если его граница содержит произвольные кривые). В таком случае можно использовать метод Монте-Карло. Суть его вот в чем.

Обводим объект произвольным прямоугольником известных размеров (его площаль обозначим через F). Берем случайную точку внутри этого прямоугольника и смотрим, попадает ли она также и внутрь объекта, или лежит вне него. Если да - увеличиваем счетчик M. То же самое делаем с другой случайной точкой - и т.д. При большом числе N таких испытаний (точек) получаем площадь объекта по формуле:

S = F * M / N

Для реализации этого метода в виде программы Win32 удобно использовать регионы и функцию PtInRegion. Или можно залить прямоугольник одним цветом, а объект - другим, а затем подсчитать отношение количества пикселей с разными цветами.


 
syte_ser78 ©   (2005-12-08 09:36) [12]

переносиш рисунок на мелиметровку. Считаешь колво вошедших квадратиков.


 
Думкин ©   (2005-12-08 09:38) [13]

> syte_ser78 ©   (08.12.05 09:36) [12]

Выпиливаешь лобзиком и взвешиваешь.


 
uw ©   (2005-12-08 09:43) [14]

syte_ser78 ©   (08.12.05 09:36) [12]

Сумму квадратиков, которые пересекаются границей, делишь пополам...


 
syte_ser78 ©   (2005-12-08 10:18) [15]

вырезаеш все квадратики ставиш их столбиком. Делиш высоту столбика на толщину бумаги


 
wal ©   (2005-12-08 10:40) [16]


> переносиш рисунок на мелиметровку.
В масштабе 1:1 (я так понял, речь о полях идет)  ;)



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

Форум: "Потрепаться";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1134150434
bg8
2005-12-09 20:47
2006.01.01
Опять serial порт...


4-1130761287
VoAnt
2005-10-31 15:21
2006.01.01
Запуск приложения загруженного в MemoryStream


2-1134754551
Silica
2005-12-16 20:35
2006.01.01
Кто-нибудь объясните пожалуйста код...


4-1130744089
sergg
2005-10-31 10:34
2006.01.01
Как заменить используемый файл?


14-1134312547
Antonn
2005-12-11 17:49
2006.01.01
Промышленное предприятие как объект организации производства





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