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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 22:36   #1
rubakKa
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 29
По умолчанию Вычислительная геометрия на плоскости (си)

Многоугольник на плоскости задан целочисленными координатами своих N вершин в декартовой системе координат.Требуется найти площадь многоугольника. Стороны многоугольника не соприкасаются (за исключением соседних – в вершинах) и не пересекаются. В первой строке входного файла INPUT.TXT находится число N. В следующих N строках находятся пары чисел (Xi, Yi) – координаты точек. Если соединить точки в данном порядке, а также первую и последнюю точки, получится заданный многоугольник (3 ≤ N ≤ 50 000, -20 000 ≤ Xi, Yi ≤ 20 000). В выходной файл OUTPUT.TXT выведите одно число – площадь многоугольника. Его следует округлить до ближайшего числа с одной цифрой после запятой.

Как делать подскажите?
rubakKa вне форума Ответить с цитированием
Старый 14.12.2010, 23:07   #2
V0id
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 30
По умолчанию

Для каждой пары вершин определить коэффициенты a и b уравнения прямой вида y=ax+b, проходящей через них, и вместе c границами области определения сохранить в массиве структур. Далее, построчно сканируя и пользуясь этим массивом, определять попадание внутрь многоугольника и подсчитывать число точек внутри него.

Последний раз редактировалось V0id; 14.12.2010 в 23:19.
V0id вне форума Ответить с цитированием
Старый 14.12.2010, 23:19   #3
rubakKa
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 29
По умолчанию

Цитата:
Сообщение от V0id Посмотреть сообщение
Для каждой пары вершин определить коэффициенты a и b уравнения прямой вида y=ax+b, проходящей через них, и вместе c границами области определения сохранить в массиве структур. Далее, построчно сканируя и пользуясь этим массивом, определять попадание внутрь многоугольника и подсчитывать число пикселей, внутри него.
Не поможете с кодом?
rubakKa вне форума Ответить с цитированием
Старый 14.12.2010, 23:26   #4
V0id
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от rubakKa Посмотреть сообщение
Не поможете с кодом?
Не сейчас, поздно уже... Давайте лучше вы пока поищете информацию по этой теме, попробуете сами реализовать и завтра покажете, что получилось, а уж я помогу тогда, если где-то возникнут трудности.
V0id вне форума Ответить с цитированием
Старый 14.12.2010, 23:34   #5
rubakKa
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 29
По умолчанию

Цитата:
Сообщение от V0id Посмотреть сообщение
Не сейчас, поздно уже... Давайте лучше вы пока поищете информацию по этой теме, попробуете сами реализовать и завтра покажете, что получилось, а уж я помогу тогда, если где-то возникнут трудности.
Завтра уже сдавать нужно.. Врятли я успею
Но попытаюсь..
rubakKa вне форума Ответить с цитированием
Старый 14.12.2010, 23:55   #6
V0id
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 30
По умолчанию

Очень поздно вы за это взялись! Если бы хотя бы в обед, можно было бы что-нибудь придумать, но теперь остается только нанять опытного фрилансера. Я же иду спать. Могу лишь подсказать, как рассчитываются коэффициенты. Для пары точек (x0,y0) и (x1,y1): a = (y1-y0)/(x1-x0), b = y0-a*x0, область определения отрезка: [min(x0,x1),max(x0,x1)].
V0id вне форума Ответить с цитированием
Старый 15.12.2010, 00:19   #7
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Если я правильно понял, то почти то же самое: площадь семиугольника.
Если считать, что многоугольник выпуклый, то разбиваете его на треугольники, находите по формуле векторного произведения площадь каждого, суммируете, получаете площадь всего многоугольника.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 15.12.2010, 00:43   #8
rubakKa
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Если я правильно понял, то почти то же самое: площадь семиугольника.
Если считать, что многоугольник выпуклый, то разбиваете его на треугольники, находите по формуле векторного произведения площадь каждого, суммируете, получаете площадь всего многоугольника.
Как здесь? http://www.cyberforum.ru/pascal/thread105431.html

Вот программа по алгоритму как в ссылке:


Код:
#include <stdio.h>
int main(){
FILE *in,*out;
in=fopen("input.txt","r");
out=fopen("output.txt","w");

float s;
int n,min;
char x[500];
char y[500];
fscanf(in,"%d",&n);
for(int i=0;i<n;i++)
fscanf(in,"%d %d",x[i], y[i]);
x[n+1]=x[0];
y[n+1]=y[0];
min=y[0];
for(int i=1;i<n;i++){
if(min>y[i]) 
min=y[i];
else 
for(int i=0;i<n+1;i++)
y[i]=y[i]-min;
}
s=0.0;
for(int i=0;i<n;i++){
s=s+((y[i+1]+y[i])*(x[i+1]-x[i])/2);
}
fprintf(out,"%d",s);
fclose(in);
fclose(out);
}
Компилируется, но вылетает при запуске. В чем ошибка?

Сдать нужно до 15:00 мск..

Последний раз редактировалось Stilet; 15.12.2010 в 11:34.
rubakKa вне форума Ответить с цитированием
Старый 15.12.2010, 01:57   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
x[n+1]=x[0];
y[n+1]=y[0];
Это что такое?? Потенциальный выход за пределы диапазона, а если и нет, то, скорее всего, имелось в виду x[n] и y[n]
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 15.12.2010, 09:01   #10
V0id
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Если я правильно понял, то почти то же самое: площадь семиугольника.
Ага, я в полусне все перепутал... Действительно, обыкновенная сумма площадей входящих в объект треугольников.
V0id вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрия в Си rik_nel Общие вопросы C/C++ 5 14.12.2010 13:43
Вычислительная практика (транскрипция) smart70 Паскаль, Turbo Pascal, PascalABC.NET 6 03.08.2010 13:21
Вычислительная геометрия на С Soull Помощь студентам 7 18.05.2010 12:54
Си геометрия Денни Помощь студентам 11 05.03.2010 09:41
Вычислительная эквивалентность исполнителей Анатолий 111 Помощь студентам 0 25.12.2009 00:38