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