Указать точки, лежащие ниже данной прямой - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д