Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рассчитать площадь фигуры 
:(
    Опции темы
keeper1
Дата 19.11.2010, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



Здравствуйте!Создаю проект в MFC AppWizard(exe).
Делаю программу, которая должна строить график функции с осями координат по заданным во внешнем файле точкам. В программе должен быть предусмотрен выбор файла в каталоге. Также рассчитать площадь фигуры, ограниченной полученным графиком и осью ОХ.
Из файла программа считывает нормально,выводит данные в LIstBox, затем рисует.
Однако вопрос такой: как найти площадь фигуры?
У нас ведь получается,что весь график состоит из отрезков,построенных по точкам,другими словами графиком является полилиния. Как же задать тогда функцию для нахождения интеграла?
PM MAIL   Вверх
bsa
Дата 19.11.2010, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



keeper1, не надо находить интеграл. достаточно разбить твою фигуру на треугольники и посчитать суммарную их площадь.
PM   Вверх
casey
Дата 19.11.2010, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: нет
Всего: 2



Зачем тебе интеграл?
Нужно найти сумму таких многоугольников:
2 вершины на оси х, 2 вершины в точках точки p1 и p2 - можно упростить до (если p2.x>p1.x)

S=(p2.x-p1.x)*abs((p2.y-p1.y)/2)

Надеюсь я понятно написал
PM MAIL WWW   Вверх
bsa
Дата 19.11.2010, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Какое отношение MFC имеет к вопросу? Не надо вводить окружающих в заблуждение.
Кстати, на будущее, MFC далеко не лучший выбор для написания GUI. Рекомендую обратить внимание на Qt.
PM   Вверх
keeper1
Дата 19.11.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



bsa я и не ввожу.Задание написать именно там.
casey, то есть если у меня все числа в массиве, то как это будет выглядеть?
сумма многоугольников,где каждый многоугольник вот такой?
S=(x[i+2]-x[i])*abs((x[i+3]-x[i+1])/2)

PM MAIL   Вверх
bsa
Дата 19.11.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



keeper1, не важно с использованием какого инструментария писать. Судя по вопросу, тебе нужен алгоритм.

1. В массиве больше 2-х точек?
2. Берешь из массива 3 первых точки, кладешь в массив треугольников.
3. убираешь из массива вторую точку
4. начинаешь с п. 1.
5. идешь по массиву треугольников и считаешь площадь (как положено: высота умножить сторону делить на 2).
PM   Вверх
keeper1
Дата 19.11.2010, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



bsa, 
а зачем убирать вторую точку?
и ты имеешь ввиду точку как (х;у) или как?
Массив динамический, в файле который я создал всего 6 точек
PM MAIL   Вверх
bsa
Дата 19.11.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



да забыл. мой алгоритм работает только для выпуклых фигур. Если фигура впуклая, то можно воспользоваться методом заливки областей.

keeper1, нарисуй шестиугольник и дели на треугольники моим способом. Увидишь зачем.
PM   Вверх
keeper1
Дата 19.11.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



У меня же не фигура,а полилиния.
В методе трапеций,к примеру,мы делим график на равные промежутки.
А у меня в файле значения точек произвольные.
Или ты предлагаешь так делать на каждом отрезке?

PM MAIL   Вверх
casey
Дата 19.11.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: нет
Всего: 2



Наверное, если у тебя все в куче лежит, типа [х1,у1,х2,у2,х3,у3]

Если я правильно понял то что тебе нужно (в чем я не уверен):


Код



float x[6]={0,0,1,1,2,2};
//P1(0;0)
//P2(1;1)
//P3(2;2)

int mas_size=6;
float S=0;

for(int i=0;i<mas_size-2;i+=2)
{
S+=(x[i+2]-x[i])*(x[i+3]+x[i+1])/2.;
}

PM MAIL WWW   Вверх
keeper1
Дата 19.11.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



Правильно понял,именно так у меня все и лежит.
Спасибо!
То что ты мне написал,то етсь в ответе мне просто вывести S? И это будет ответ,так ведь?
PM MAIL   Вверх
casey
Дата 19.11.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: нет
Всего: 2



Ну да, это будет площадь фигуры ограниченная осью Х снизу и отрезками  ((0;0)(1;1)) и ((1;1)(2;2)) сверху
PM MAIL WWW   Вверх
keeper1
Дата 19.11.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



Ага!Теперь понятно!Спасбо большое!
А может быть еще подскажешь,как нарисовать координатные оси для моего графика?
Вот так рисую сам график:
Код

CClientDC MyDC(GetDlgItem(IDC_STATIC1)); 

CRect Rect; 
CWnd *pWnd = MyDC.GetWindow();  

pWnd->GetClientRect( &Rect ); 

CPen Pen(PS_SOLID, 2, RGB(0,0,255)); 
MyDC.SelectObject(&Pen); 
for(i=0;i<n-1;i++)
MyDC.LineTo( px[i], px[i+1] );

Рисует норм,просто нужно добавить координатные оси...Не знаешь?
PM MAIL   Вверх
casey
Дата 19.11.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: нет
Всего: 2



Я не знаю размеров твоей области для рисования, ничего сложного в этом нет. 
MoveTo   --  переместиться в точку. LineTo-рисовать из точки в которой есть "курсор" до указанных координат
Только в винде начало координат в левом верхнем углу, т.е. х растет вниз
PM MAIL WWW   Вверх
keeper1
Дата 19.11.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



Это я все знаю,так и делаю.И работает это нормально!
Просто не знаю как именно графически добавить оси
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.