Мне нужна помощь с моей домашней работой. Я очень старался сделать это, и я потерпел неудачу.
У нас есть треугольник с координатами: A = (-4, 4), B = (4, -2), C = (6,6). Нужно загрузить от пользователя координаты точки Р = (х, у), а затем записать информацию на экране, сообщая, если точка Р лежит в, из, или на стороне треугольника.
Это то, что я сделал так далеко:
class Program
{
static void Main(string[] args)
{
const int x1 = -4, y1 = 4;
const int x2 = 4, y2 = -2;
const int x3 = 6, y3 = 6;
int x0, y0;
Console.Write("Podaj współrzędną x: ");
x0 = Convert.ToInt32(Console.ReadLine());
Console.Write("Podaj współrzędną y: ");
y0 = Convert.ToInt32(Console.ReadLine());
double A_AB = (y2 - y1 / x2 - x1);
double B_AB = (y1 - (y2 - y1 / x2 - x1) * x1);
double A_AC = (y3 - y1 / x3 - x1);
double B_AC = (y1 - (y3 - y1 / x3 - x1) * x1);
double A_BC = (y3 - y2 / x3 - x2);
double B_BC = (y2 - (y3 - y2 / x3 - x2) * x2);
if ((y0 > (A_AB * x0 + B_AB) && y0 > (A_AC * x0 + B_AC) && y0 > (A_BC * x0 + B_BC))) Console.WriteLine("Point is inside of the triangle.");
else if (y0 == (A_AB * x0 + B_AB) || y0 == (A_AC * x0 + B_AC) || y0 == (A_BC * x0 + B_BC)) Console.WriteLine("Point is on the side of the triangle");
else Console.WriteLine("Point is outside of the triangle.");
Console.ReadKey(true);
}
}
Что-то не так, потому что ему трудно попасть в треугольник. Кто-нибудь проанализирует это? Мой мозг горит.
Благодарю.
Проблема решена с использованием барицентрической системы координат следующим образом:
public static void Main(string[] args)
{
const double x1 = -4, y1 = 4;
const double x2 = 4, y2 = -2;
const double x3 = 6, y3 = 6;
double x, y;
x = 0;
y = 1;
double a = ((y2 - y3)*(x - x3) + (x3 - x2)*(y - y3)) / ((y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3));
double b = ((y3 - y1)*(x - x3) + (x1 - x3)*(y - y3)) / ((y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3));
double c = 1 - a - b;
if (a == 0 || b == 0 || c == 0) Console.WriteLine("Point is on the side of the triangle");
else if (a >= 0 && a <= 1 && b >= 0 && b<= 1 && c >= 0 && c <= 1) Console.WriteLine("Point is inside of the triangle.");
else Console.WriteLine("Point is outside of the triangle.");
}