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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
14-1133890435
Хинт
2005-12-06 20:33
2006.01.01
Выбор Delphi


14-1134123270
Stanislav
2005-12-09 13:14
2006.01.01
Алгоритм сжатия данных


14-1134312985
wicked
2005-12-11 17:56
2006.01.01
APE.CUE vs всё остальное...


14-1133853822
nk
2005-12-06 10:23
2006.01.01
Кто может подсказать...


2-1134410264
vpavel
2005-12-12 20:57
2006.01.01
Как сделать что бы программа была на весь экран