Указать точки, лежащие ниже данной прямой - 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();
            
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.385 из 5
Похожие ответы