Дано множество точек на плоскости. Сколько точек не принадлежит прямой, проходящей через две первые точки? - C#
Формулировка задачи:
Доброго вечера!
Подскажите, пожалуйста, по следующей задаче:
Дано множество точек на плоскости. Сколько точек не принадлежит прямой, проходящей через две первые точки?
Множество точек я ввожу. Нахожу, которые лежат на прямой. Но не понимаю вторую часть задания. Мне нужно из всех введённых мною точек найти те, которые на этой прямой не лежат ?Решение задачи: «Дано множество точек на плоскости. Сколько точек не принадлежит прямой, проходящей через две первые точки?»
textual
Листинг программы
- class Program
- {
- static void Main(string[] args)
- {
- //Ввод точек
- var pts = new Point[]
- {
- new Point(),
- new Point(1, 1),
- new Point(2, 2),
- new Point(3, 1),
- new Point(100, 100),
- new Point(-10,23),
- new Point(15,-15),
- new Point(78,78),
- new Point(6, 6),
- };
- //Выбираем те, что не лежат на прямой, образованной двумя первыми точками
- var outOfLine = pts.Skip(2).Where(pt => !LineContainsPoint(pts[0], pts[1], pt)).ToList();
- //Выводим результат.
- Console.WriteLine("На прямой не лежат точки:");
- Console.WriteLine(string.Join(Environment.NewLine, outOfLine));
- Console.Read();
- }
- /// <summary>
- /// Функция проверяет принадлежность заданной точки прямой, заданной двумя точками
- /// </summary>
- /// <param name="pt1">Первая точка прямой</param>
- /// <param name="pt2">Вторая точка прямой</param>
- /// <param name="pt">Точка, принадлежность которой нужно проверить.</param>
- private static bool LineContainsPoint(Point pt1, Point pt2, Point pt)
- {
- //Вектор прямой
- var v = new Point(pt2.X - pt1.X, pt2.Y - pt1.Y);
- //Вектор к точке
- var v1 = new Point(pt.X - pt1.X, pt.Y - pt1.Y);
- //Если векторы коллинеарны, то точка лежит на прямой
- return v.X * v1.Y == v1.X * v.Y;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д