Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2009, 13:21   #1
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию Определение площади многоугольника

добрый день.
буду очень благодарен, если вы мне поможете определить площадь многоконтурного многоугольника (неизвестно, выпуклый или нет).
Этот многоугольник представлен в виде массива координат:

Код:
Type

TCoord = Double;
TXY = record
  X : TCoord;
  Y : TCoord;
TAr = Array of TXY;
TArray = Array of TAr;
Bayazet вне форума Ответить с цитированием
Старый 16.02.2009, 20:11   #2
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

Bayazet, могу подкинуть тебе довольно хитрый способ приближенно найти площадь произвольной фигуры (при условии, что фигура не слишком большая).
Алгоритм (для досовского паскаля):
1) Находим самые большые x_max и y_max.
2) Расчитываем коэффициенты деления по формулам:
kx=x_max/x_size,
ky=y_max/y_size,
где
x_size и y_size - размеры досовского экрана в пикселях.
3) Пересчитываем все координаты вершин по формулам:
x1=x/kx;
y1=y/ky.
4) В паскале есть возможность по координатам вершин построить на экране залитый полигон. Строим его по пересчитанным координатам;
5) Сканируем весь экран на наличие точек цвета полигона и считаем их количество N;
6) Находим приближенное значение площади:
S=N*kx*ky.

P.S.: Лично я частенько пользуюсь графическим методом расчета, когда аналитически сложно вычислить что-либо
P.P.S: А что такое "многоконтурный многоугольник"?
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)

Последний раз редактировалось bag; 16.02.2009 в 20:15.
bag вне форума Ответить с цитированием
Старый 16.02.2009, 20:43   #3
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
P.P.S: А что такое "многоконтурный многоугольник"?
Вероятно имелся ввиду тот, у которого стороны пересекаются. (ну типа четырехугольника с координатами (0,0)(10,0)(0,10)(10,10) (песочные часики))
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 16.02.2009, 21:04   #4
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
Вероятно имелся ввиду тот, у которого стороны пересекаются. (ну типа четырехугольника с координатами (0,0)(10,0)(0,10)(10,10) (песочные часики))
Возможно я чтото непонял... но где у твоего квадрата ( (0,0)(10,0)(0,10)(10,10) )пересекаются стороны??
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.
Veselyn вне форума Ответить с цитированием
Старый 16.02.2009, 21:42   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию Вычисление площади многоугольника

Кстати, существует простой метод для вычисления площади произвольного многоугольника.

Площадь треугольника вычисляется по формуле

Код:
|                            | x1 y1 1 |
| S(1, 2, 3) = 1/2!  | x2 y2 1 |
|                            | x3 y3 1 |
Значение будет положительным или отрицательным в зависимости от направления обхода точек.

Для произвольного многоугольника берем произвольную точку O.
(например, начало координат). Тогда площадь равна сумме площадей треугольников.

S(1,2,3,4,...,N) = S(O, 1, 2) + S(O, 2, 3) + S(O, 3, 4) + ... + S(O, N-1, N)+S(O, N, 1)

Подробнее см. Ф.Клейн. "Элементарная математика с точки зрения высшей". Там же рассматриваются самопересекающиеся многоугольники.

Последний раз редактировалось alexBlack; 16.02.2009 в 21:46.
alexBlack вне форума Ответить с цитированием
Старый 17.02.2009, 12:48   #6
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Может я ошибаюсь.... но помоему мона будет и по площадям трапеций:
Ps-массив точек ^_^
Код:
setlength(Ps,Length(Ps)+1);//массив точек
Ps[length(Ps)-1];=Ps[0];
S:=0;
for i:=0 to length(Ps)-2 do
begin
  S:=S+(Ps[i+1].X-Ps[i].X)*(Ps[i+1].Y+Ps[i].Y);
end;
S:=ABS(S)/2;
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построчный алгоритм заполнения многоугольника с затравкой (Билдер С++) SKA_zo4nik Помощь студентам 8 28.03.2011 20:15
Площади квадратов Arch0000 Помощь студентам 10 15.02.2009 19:41
Задача с периметром многоугольника Abakan Общие вопросы C/C++ 1 02.01.2009 19:06
Необходимо определить периметр многоугольника, заданного координатами вершин Андрю)(@ Паскаль, Turbo Pascal, PascalABC.NET 6 23.12.2008 12:30
Рисование многоугольника (собственный класс) MaTBeu Общие вопросы C/C++ 1 08.12.2007 14:53