На плоскости заданы n отрезков координатами концевых точек - C#

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

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

На плоскости заданы n отрезков координатами концевых точек. Концы отрезков задаются двумя парами координат (x1[i],y1[i]), (x2[i],y2[i]), 1<=i<=n (концы принадлежат отрезку). Помогите пожалуйста.
Пропустил основное. Вот суть задачи : Необходимо найти прямую, имеющую общие точки с максимальным числом отрезков, и напечатать в порядке возрастания номера тех отрезков, которые эта прямая пересекает.

Решение задачи: «На плоскости заданы n отрезков координатами концевых точек»

textual
Листинг программы
using System;
 
class Program
{
    static void Main()
    {
        int n = 5, max = 0, index = 0;
        Line[] lines = new Line[n];
        Random r = new Random();
 
        for (int i = 0; i < n; i++ )
        {
            lines[i] = new Line(r.Next(1, n + 1), r.Next(1, n + 1), r.Next(1, n + 1), r.Next(1, n + 1));
            Console.WriteLine("{0}. ({1},{2}) ({3},{4})", i, lines[i].x1, lines[i].y1, lines[i].x2, lines[i].y2);
        }
 
        for (int i = 0; i < n; i++)
        {
            int count = 0;
            for (int j = 0; j < n; j++)
                if (i != j && lines[i].Compare(lines[j]))
                    count++;
            if (count > max)
            {
                max = count;
                index = i;
            }
        }
        Console.WriteLine("Прямая, имеющая общие точки с максимальным числом отрезков: " + index);
        Console.Write("Номера пересекаемых отрезков: ");
        for (int i = 0; i < n; i++)
            if (i != index && lines[index].Compare(lines[i]))
                Console.Write(i + " ");
        Console.ReadKey();
    }
}
 
class Line
{
    public int x1 { get; private set; }
    public int x2 { get; private set; }
    public int y1 { get; private set; }
    public int y2 { get; private set; }
 
    public Line(int x1, int y1, int x2, int y2)
    {
        this.x1 = x1 < x2 ? x1 : x2;
        this.x2 = x2 < x1 ? x1 : x2;
        this.y1 = y1 < y2 ? y1 : y2;
        this.y2 = y2 < y1 ? y1 : y2;
    }
 
    public bool Compare(Line target)
    {
        if (x1 <= target.x2 && x2 >= target.x1 && y1 <= target.y2 && y2 >= target.y1)
            return true;
        return false;
    }
}

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


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

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

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