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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2012, 17:08   #1
fbsd
 
Регистрация: 14.12.2009
Сообщений: 9
По умолчанию Длина линии вертикального разреза фигуры

Приветствую, помогите пожалуйста с задачей:

Составить алгоритм и написать код программы на С(или Паскаль), вычисляющей длину линии вертикального разреза фигуры, значения площадей фигуры слева и справа от линии разреза, по значениям аргумента x, вводимого из консоли.

....
Сам понимаю, что длину разреза можно найти найдя верхний y и нижний y и далее через длина=SQRT((y1 - y2)^2 + (x - x)^ 2) = SQRT((y1 - y2)^2)
По формуле, вложенной в изображении можно найти верхнюю границу, а вот как определить нижнюю не пойму.
Изображения
Тип файла: jpg 1.jpg (20.4 Кб, 68 просмотров)
Тип файла: png 19849fb462c9e7e3192e3a667fb5a77a.png (1,006 байт, 154 просмотров)
fbsd вне форума Ответить с цитированием
Старый 07.02.2012, 18:20   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

y^2 +(x-1)^2 = 1 -> y=sqtr(1-(x-1)^2) - формула окружности верхнего полукруга f1(x)
(y+1)^2 +x^2 =1 -> y=sqrt(1-x^2)-1 формула окружности левого нижнего f2(x)
(y+1)^2+(x-2)^2 =1 -> y=sqrt(1-(x-2)^2)-1 формула окружности правого нижнего f3(x)
(все корни берем с положительным знаком т.к. необходимы имеем дело с верхними частями окружности)

Длинна линии
Код:
if(x>=0 && x<=1)
return sqtr(1-(x-1)^2) - (sqrt(1-x^2)-1)
else if(x>1 && x<=2)
 return sqtr(1-(x-1)^2) - (sqrt(1-(x-2)^2)-1)
Площадь так (метод прямоугольника, вроде называется)
Код:
float S1=0,S2=0;
for(float i=0;i<X; i+=0.01){
if(i<1)
     S1+=(f1(i) - f2(i))*0.01;
else 
     S1+=(f1(i) - f3(i))*0.01;
}
for(float i=X;i<2; i+=0.01){
     if(i<1)
     S2+=(f1(i) - f2(i))*0.01;
else 
     S2+=(f1(i) - f3(i))*0.01;
};
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 07.02.2012, 18:48   #3
fbsd
 
Регистрация: 14.12.2009
Сообщений: 9
По умолчанию

отлично, большое спасибо за формулы и за код.
fbsd вне форума Ответить с цитированием
Старый 07.02.2012, 19:45   #4
fbsd
 
Регистрация: 14.12.2009
Сообщений: 9
По умолчанию

маленький вопрос, как описать f1(i) f2(i) и f3(i) соответственно.
а то выдает например это. [Error] Untitled1.cpp:37: error: `f2' was not declared in this scope
fbsd вне форума Ответить с цитированием
Старый 07.02.2012, 21:20   #5
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Код:
float F1(float X){
          return sqtr(1-(x-1)^2);
}
По такому принципу.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение одной фигуры,вслед изменения высоты другой фигуры. 7vlad37 Microsoft Office Excel 3 21.07.2011 18:01
Правка вертикального меню в CSS Artem93 Общие вопросы C/C++ 1 11.06.2011 00:59
Правка вертикального меню в CSS Artem93 Помощь студентам 1 11.06.2011 00:58
Помогите сделать алгоритм минимального разреза на графах Алексей Равен Помощь студентам 0 07.05.2009 13:05