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

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


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

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

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