Форум: "Потрепаться";
Текущий архив: 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.49 MB
Время: 0.009 c