Нахождение точки на плоскости - C#
Формулировка задачи:
Добрый день, имею такую задачу :
Имею ряд вопросов, начнем по порядку : как проверить находится точка выше или ниже ?
как вообще эт реализовать ?)
Интерфейс и классы я написал, а все остальное чет не понятно , как сделать... можете помочь ?
Описать интерфейс IPolynomial, соответствующий многочленам. Он
должен содержать методы IsAbove и IsBelow, проверяющие, находится ли ука-
занная точка на плоскости строго выше или ниже графика многочлена соответ-
ственно.
Описать классы Linear (линейный) и Quadratic (квадратный), реализующие
этот интерфейс. Написать функцию IsBetween, принимающую два многочлена
и координаты точки и проверяющую, находится ли точка выше первого и ниже
второго многочлена.
Написать программу, использующую эту функцию.
Построить UML-диаграмму.
interface IPolynomial
{
void IsAbove();
void IsBellow();
}
class Linear {
void Isabove();
void IsBellow();
}
class Quadratic
{
void Isabove();
void IsBellow();
}
с кодом может быть я справлюсь, можете чисто математически объяснить, как проверить находится ли точка (x,y) выше или ниже графика многочлена
Решение задачи: «Нахождение точки на плоскости»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var linear = new Linear(); //y=x
var quadratic = new Quadratic(1,0,-1); //y = x^2 - 1
var p = new Point(10,11);
Console.WriteLine(linear.IsAbove(p));
p = new Point(3, 7);
Console.WriteLine(quadratic.IsBelow(p));
p = new Point(0, -0.5);
Console.WriteLine(IsBetween(p,quadratic,linear));
Console.ReadKey();
}
static bool IsBetween(Point _P, IPolynomial p1, IPolynomial p2)
{
return p1.IsAbove(_P) && p2.IsBelow(_P);
}
}
interface IPolynomial
{
bool IsAbove(Point _p);
bool IsBelow(Point _p);
}
class Linear : IPolynomial
{
double a,b;
Func<double, double> Func(double _a, double _b)
{
return arg => _a * arg + _b;
}
public bool IsAbove(Point _p)
{
return _p.Y > Func(a, b)(_p.X);
}
public bool IsBelow(Point _p)
{
return _p.Y < Func(a, b)(_p.X);
}
//public double Y(double _x) { return Func(a, b)(_x); }
public Linear() { a = 1; b = 0; }
public Linear(double _a, double _b) { a = _a; b = _b; }
}
class Quadratic : IPolynomial
{
double a, b, c;
Func<double, double> Func(double _a, double _b , double _c)
{
return arg => _a * arg * arg + _b * arg + _c;
}
public bool IsAbove(Point _p)
{
return _p.Y > Func(a, b, c)(_p.X);
}
public bool IsBelow(Point _p)
{
return _p.Y < Func(a, b, c)(_p.X);
}
//public double Y(double _x) { return Func(a, b, c)(_x); }
public Quadratic() { a = 1; b = 0; c = 0; }
public Quadratic(double _a, double _b, double _c) { a = _a; b = _b; c = _c; }
}
struct Point {
public double X;
public double Y;
public Point(double _x, double _y) {
X = _x;
Y = _y;
}
}
}