Вычисление значения функции по графику - C# (182855)
Формулировка задачи:
Всем приветик!) Пожалуйста помогите вычислить значения функции...
Во вложенном файле, график номер 2
Заранее спасибо)
Решение задачи: «Вычисление значения функции по графику»
textual
Листинг программы
public double F(double x, double r)
{
// Проверка на значение радиуса
if (r > 3 || r < 0)
throw new ArgumentOutOfRangeException("Radius must be between 0 and 3");
// R2
double r2 = 3 - r;
// Пределы функции
double lowerLimit = -r2 - 5;
double upperLimit = r + 2;
// Проверка на принадлежность Х допустимому интервалу значений
if (x < lowerLimit || x > upperLimit)
throw new ArgumentOutOfRangeException(string.Format("Function is undefined for x belonging to [{0};{1}]", lowerLimit, upperLimit));
// Пределы промежутков. Для удобства.
double lim1 = -2 - r2;
double lim2 = 1 - r;
double lim3 = 1 + r;
// Точки, в которых У всегда равна нулю
if (x == lim1 || x == lim2 || x == lim3)
return 0;
// Первый промежуток. Всегда единица
if (x >= lowerLimit && x <= lowerLimit + 1)
return 1;
// Второй промежуток. Длина противолежащего катета равна длине прилежащего, помноженного на тангенс угла прилежащего катета и гипотенузы.
if (x > lowerLimit + 1 && x < lim1)
return (lim1 - x) * 0.5;
// Второй и третий промежутки. По уравнению окружностей.
if (x > lim1 && x < lim2)
return Math.Sqrt(Math.Pow(r2, 2) - Math.Pow(x + 2, 2));
if (x >= lim2 && x < lim3)
return -Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x - 1, 2));
// Последний промежуток.
return r + 1 - x;
}