Указать точки, лежащие ниже данной прямой - C#
Формулировка задачи:
Дано множество точек на плоскости и прямая d, проходящая через две последние точки. Указать точки, лежащие ниже данной прямой
Решение задачи: «Указать точки, лежащие ниже данной прямой»
textual
Листинг программы
using System;
namespace cyb20 {
class Vector {
//Свойства
public double X { get; set; }
public double Y { get; set; }
//Методы
public static Vector operator -(Vector u, Vector w) {
return new Vector() {
X=u.X-w.X,
Y=u.Y-w.Y
};
}
public static bool operator *(Vector u, Vector w) {
//Оба вектора на плоскости, значит их векторное произведение даст вектор параллельный оси OZ. Вот его направление нас и интересует здесь.
return (u.X*w.Y-w.X*u.Y)<0;
}
public override string ToString() {
return string.Format("({0},{1})",X,Y);
}
}
class Program {
static void Main() {
//Делаем массив векторов, указывающих на точки
Vector[] m= {
new Vector(){ X=17, Y=0 },
new Vector(){ X=1, Y=2 },
new Vector(){ X=4, Y=3 },
new Vector(){ X=5, Y=6 },
new Vector(){ X=7, Y=-6 },
new Vector(){ X=8, Y=7 },
new Vector(){ X=9, Y=10 },
};
int l=m.Length;
if(m[l-2].X==m[l-1].X && m[l-2].Y==m[l-1].Y)
Console.WriteLine("Последние две точки совпадают");
else if (m[l-2].X==m[l-1].X)
Console.WriteLine("Прямая вертикальна");
else {
//Определяем вектор v=ab параллельный прямой с положительной проекцией на оси ОХ
Vector a=m[l-2].X<m[l-1].X ? m[l-2] : m[l-1];
Vector b=m[l-2].X>m[l-1].X ? m[l-2] : m[l-1];
Vector v=b-a;
//Пройдемся по массиву и определим в каждом случае положение точки
for (int i=0; i<l-2; i++) {
if (v*(m[i]-a))
Console.WriteLine("Точка {0} лежит ниже прямой",m[i]);
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}