Дано множество точек на плоскости. Сколько точек не принадлежит прямой, проходящей через две первые точки? - C#

Узнай цену своей работы

Формулировка задачи:

Доброго вечера! Подскажите, пожалуйста, по следующей задаче:

Дано множество точек на плоскости. Сколько точек не принадлежит прямой, проходящей через две первые точки?

Множество точек я ввожу. Нахожу, которые лежат на прямой. Но не понимаю вторую часть задания. Мне нужно из всех введённых мною точек найти те, которые на этой прямой не лежат ?

Решение задачи: «Дано множество точек на плоскости. Сколько точек не принадлежит прямой, проходящей через две первые точки?»

textual
Листинг программы
  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         //Ввод точек
  6.         var pts = new Point[]
  7.                     {
  8.                         new Point(),
  9.                         new Point(1, 1),
  10.                         new Point(2, 2),
  11.                         new Point(3, 1),
  12.                         new Point(100, 100),
  13.                         new Point(-10,23),
  14.                         new Point(15,-15),
  15.                         new Point(78,78),
  16.                         new Point(6, 6),
  17.                     };
  18.         //Выбираем те, что не лежат на прямой, образованной двумя первыми точками
  19.         var outOfLine = pts.Skip(2).Where(pt => !LineContainsPoint(pts[0], pts[1], pt)).ToList();
  20.         //Выводим результат.
  21.         Console.WriteLine("На прямой не лежат точки:");
  22.         Console.WriteLine(string.Join(Environment.NewLine, outOfLine));
  23.         Console.Read();
  24.     }
  25.  
  26.     /// <summary>
  27.     /// Функция проверяет принадлежность заданной точки прямой, заданной двумя точками
  28.     /// </summary>
  29.     /// <param name="pt1">Первая точка прямой</param>
  30.     /// <param name="pt2">Вторая точка прямой</param>
  31.     /// <param name="pt">Точка, принадлежность которой нужно проверить.</param>
  32.     private static bool LineContainsPoint(Point pt1, Point pt2, Point pt)
  33.     {
  34.         //Вектор прямой
  35.         var v = new Point(pt2.X - pt1.X, pt2.Y - pt1.Y);
  36.         //Вектор к точке
  37.         var v1 = new Point(pt.X - pt1.X, pt.Y - pt1.Y);
  38.         //Если векторы коллинеарны, то точка лежит на прямой
  39.         return v.X * v1.Y == v1.X * v.Y;
  40.     }
  41. }

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


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

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

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы