Не получается решить задачу из учебника Меньшикова на языке C#. Помогите
В декартовой системе координат на плоскости заданы координаты вершин треугольника и ещё одной точки. Определить, принадлежит ли эта точка треугольнику.
Входные данные: В четырёх строках находятся пары чисел - координаты точек. Числа в первых трёх строках - это координаты вершин треугольника, в четвёртой строке - координаты тестируемой точки. Координаты вершин - целые числа, для любой точки выполняются следующие условия: -10 000 <= x, y <= 10 000.
Выходные данные: Вывести слово "In", если точка находится внутри треугольника, или "Out" - если снаружи.
Пример 1:
Входные данные:
-2 -2
3 1
0 1
0 0
Выход:
In
Пример 2:
Входные данные:
-2 -2
3 1
0 1
2 -2
Выходные данные:
Out
Прошу решить только на языке C#.
Ответы (1 шт):
struct Point
{
public double X { get; set; }
public double Y { get; set; }
}
static void Main(string[] args)
{
Point a = GetPoint();
Point b = GetPoint();
Point c = GetPoint();
Point toCheck = GetPoint();
bool isIn = IsPointInTriangle(a, b, c, toCheck);
if(isIn)
Console.WriteLine("In");
else
Console.WriteLine("Out");
Console.Read();
}
private static Point GetPoint()
{
Point p = new Point();
Console.Write("X = ");
p.X = double.Parse(Console.ReadLine());
Console.Write("Y = ");
p.Y = double.Parse(Console.ReadLine());
return p;
}
private static double GetTriangleArea(Point a, Point b, Point c)
{
return Math.Abs((a.X - c.X) * (b.Y - c.Y) + (b.X - c.X) * (c.Y - a.Y));
}
private static bool IsPointInTriangle(Point a, Point b, Point c, Point p)
{
double trArea = GetTriangleArea(a, b, c);//площадь основного треугольника
double trArea2 = GetTriangleArea(a, b, p);//площади треугольника, образованного из 2 точек основного
double trArea3 = GetTriangleArea(a, p, c);//и точки, которая проверяется на принадлежность
double trArea4 = GetTriangleArea(b, p, c);//к треугольнику
return trArea == trArea2 + trArea3 + trArea4;// если площади образованных треугольников равны, то точка в треугольнике
}