IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на нахождение площади, площадь произвольного многоугольника
сообщение
Сообщение #1


Гость






Задаются координаты вершин в порядке обхода(то есть программа должна просить ввести их). Необходимо вычислить площадь полученного многоугольника. Он может быть как выпуклый так и нет. Но стороны пересекаться не могут.
Пожалуйста, иначе мне mega_chok.gif
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
сообщение
Сообщение #2


Гость






Определить, находится ли произвольно выбранная на плоскости точка внутри твоего многоугольника, сможешь? Тогда ищи на форуме про "Метод Монте-Карло"...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Не могу. В этом и заключается одна из основных проблем.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Не думаю, что ЭТО является неразрешимой проблемой: В сети есть достаточно алгоритмов, проверяющих принадлежность точки многоугольнику... Вот тут, например: Determining if a point lies on the interior of a polygon

Ну а это - реализация первого алгоритма на Паскале:
function min(a, b: double): double;
begin
min := a;
if b < a then min := b;
end;

function max(a, b: double): double;
begin
max := a;
if b > a then max := b;
end;

type
point = record
x, y: double;
end;


function InsidePolygon(var polygon: array of point;
const n: integer; p: point): boolean;
var
i, counter: integer;
xinters: double;
p1, p2: point;
begin
counter := 0;

p1 := polygon[0];
for i := 1 to n do begin
p2 := polygon[i mod n];
if p.y > min(p1.y, p2.y) then begin

if p.y <= max(p1.y, p2.y) then begin
if p.x <= max(p1.x, p2.x) then begin
if p1.y <> p2.y then begin
xinters := (p.y - p1.y)*(p2.x - p1.x) / (p2.y-p1.y) + p1.x;
if (p1.x = p2.x) or (p.x <= xinters) then inc(counter);
end;
end;
end;

end;
p1 := p2;
end;

if (counter mod 2) = 0 then InsidePolygon := false
else InsidePolygon := true;
end;

Проверено для невыпуклого многоугольника... У меня работает.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.05.2024 17:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name