LINUX.ORG.RU

История изменений

Исправление Rossiks, (текущая версия) :

Вот что выдаёт бесплатный ИИ из телеги:

csharp
using System;

class Program
{
    static void Main(string[] args)
    {
        // Проверяем, что количество аргументов равно 4 (два многоугольника)
        if (args.Length != 4)
        {
            Console.WriteLine("Неверное количество аргументов");
            return;
        }

        // Проверяем, что каждый аргумент содержит 8 координат (4 точки)
        for (int i = 0; i < args.Length; i++)
        {
            string[] coordinates = args[i].Split(',');
            if (coordinates.Length != 8)
            {
                Console.WriteLine($"Неверное количество координат в аргументе {i + 1}");
                return;
            }
        }

        // Получаем координаты первого многоугольника
        double[] polygon1 = Array.ConvertAll(args[0].Split(','), double.Parse);

        // Получаем координаты второго многоугольника
        double[] polygon2 = Array.ConvertAll(args[1].Split(','), double.Parse);

        // Проверяем пересечение многоугольников
        bool intersection = CheckPolygonIntersection(polygon1, polygon2);

        // Выводим результат
        if (intersection)
        {
            Console.WriteLine("Многоугольники пересекаются");
        }
        else
        {
            Console.WriteLine("Многоугольники не пересекаются");
        }
    }

    static bool CheckPolygonIntersection(double[] polygon1, double[] polygon2)
    {
        // Проверяем пересечение каждой стороны первого многоугольника со сторонами второго многоугольника
        for (int i = 0; i < polygon1.Length; i += 2)
        {
            double x1 = polygon1[i];
            double y1 = polygon1[i + 1];

            double x2 = polygon1[(i + 2) % polygon1.Length];
            double y2 = polygon1[(i + 3) % polygon1.Length];

            for (int j = 0; j < polygon2.Length; j += 2)
            {
                double x3 = polygon2[j];
                double y3 = polygon2[j + 1];

                double x4 = polygon2[(j + 2) % polygon2.Length];
                double y4 = polygon2[(j + 3) % polygon2.Length];

                if (CheckLineIntersection(x1, y1, x2, y2, x3, y3, x4, y4))
                {
                    return true;
                }
            }
        }

        return false;
    }

    static bool CheckLineIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
    {
        // Проверяем пересечение двух отрезков на плоскости
        double denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
        if (denominator == 0)
        {
            return false;
        }

        double ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;
        double ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;

        if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1)
        {
            return true;
        }

        return false;
    }
}

Исправление Rossiks, :

Вот что выдаёт бесплатный ИИ из телеги:

Вот пример программы на C#, которая принимает в аргументах массивы географических координат в виде чисел с плавающей запятой и определяет пересечение многоугольников:

csharp
using System;

class Program
{
    static void Main(string[] args)
    {
        // Проверяем, что количество аргументов равно 4 (два многоугольника)
        if (args.Length != 4)
        {
            Console.WriteLine("Неверное количество аргументов");
            return;
        }

        // Проверяем, что каждый аргумент содержит 8 координат (4 точки)
        for (int i = 0; i < args.Length; i++)
        {
            string[] coordinates = args[i].Split(',');
            if (coordinates.Length != 8)
            {
                Console.WriteLine($"Неверное количество координат в аргументе {i + 1}");
                return;
            }
        }

        // Получаем координаты первого многоугольника
        double[] polygon1 = Array.ConvertAll(args[0].Split(','), double.Parse);

        // Получаем координаты второго многоугольника
        double[] polygon2 = Array.ConvertAll(args[1].Split(','), double.Parse);

        // Проверяем пересечение многоугольников
        bool intersection = CheckPolygonIntersection(polygon1, polygon2);

        // Выводим результат
        if (intersection)
        {
            Console.WriteLine("Многоугольники пересекаются");
        }
        else
        {
            Console.WriteLine("Многоугольники не пересекаются");
        }
    }

    static bool CheckPolygonIntersection(double[] polygon1, double[] polygon2)
    {
        // Проверяем пересечение каждой стороны первого многоугольника со сторонами второго многоугольника
        for (int i = 0; i < polygon1.Length; i += 2)
        {
            double x1 = polygon1[i];
            double y1 = polygon1[i + 1];

            double x2 = polygon1[(i + 2) % polygon1.Length];
            double y2 = polygon1[(i + 3) % polygon1.Length];

            for (int j = 0; j < polygon2.Length; j += 2)
            {
                double x3 = polygon2[j];
                double y3 = polygon2[j + 1];

                double x4 = polygon2[(j + 2) % polygon2.Length];
                double y4 = polygon2[(j + 3) % polygon2.Length];

                if (CheckLineIntersection(x1, y1, x2, y2, x3, y3, x4, y4))
                {
                    return true;
                }
            }
        }

        return false;
    }

    static bool CheckLineIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
    {
        // Реализация функции CheckLineIntersection
        // ...
    }
}

Вот пример реализации функции CheckLineIntersection, которая определяет пересечение двух линий или отрезков на основе их координат:

csharp
static bool CheckLineIntersection(double x1, double y1, double x2, double y2)
{
    // Проверяем, что линии не являются вертикальными
    if (x1 != x2)
    {
        // Вычисляем коэффициенты наклона и свободные члены уравнений прямых, содержащих линии
        double slope1 = (y2 - y1) / (x2 - x1);
        double intercept1 = y1 - slope1 * x1;

        // Проверяем, что вторая линия не является вертикальной
        if (x3 != x4)
        {
            // Вычисляем коэффициенты наклона и свободные члены уравнений прямых, содержащих линии
            double slope2 = (y4 - y3) / (x4 - x3);
            double intercept2 = y3 - slope2 * x3;

            // Проверяем, что прямые не параллельны
            if (slope1 != slope2)
            {
                // Вычисляем координаты точки пересечения прямых
                double intersectionX = (intercept2 - intercept1) / (slope1 - slope2);
                double intersectionY = slope1 * intersectionX + intercept1;

                // Проверяем, что точка пересечения находится внутри отрезков
                if (intersectionX >= Math.Min(x1, x2) && intersectionX <= Math.Max(x1, x2) &&
                    intersectionX >= Math.Min(x3, x4) && intersectionX <= Math.Max(x3, x4) &&
                    intersectionY >= Math.Min(y1, y2) && intersectionY <= Math.Max(y1, y2) &&
                    intersectionY >= Math.Min(y3, y4) && intersectionY <= Math.Max(y3, y4))
                {
                    return true;
                }
            }
        }
    }

    return false;
}

Исправление Rossiks, :

Вот что выдаёт бесплатный ИИ из телеги:

Вот пример программы на C#, которая принимает в аргументах массивы географических координат в виде чисел с плавающей запятой и определяет пересечение многоугольников:

csharp
using System;

class Program
{
    static void Main(string[] args)
    {
        // Проверяем, что количество аргументов равно 4 (два многоугольника)
        if (args.Length != 4)
        {
            Console.WriteLine("Неверное количество аргументов");
            return;
        }

        // Проверяем, что каждый аргумент содержит 8 координат (4 точки)
        for (int i = 0; i < args.Length; i++)
        {
            string[] coordinates = args[i].Split(',');
            if (coordinates.Length != 8)
            {
                Console.WriteLine($"Неверное количество координат в аргументе {i + 1}");
                return;
            }
        }

        // Получаем координаты первого многоугольника
        double[] polygon1 = Array.ConvertAll(args[0].Split(','), double.Parse);

        // Получаем координаты второго многоугольника
        double[] polygon2 = Array.ConvertAll(args[1].Split(','), double.Parse);

        // Проверяем пересечение многоугольников
        bool intersection = CheckPolygonIntersection(polygon1, polygon2);

        // Выводим результат
        if (intersection)
        {
            Console.WriteLine("Многоугольники пересекаются");
        }
        else
        {
            Console.WriteLine("Многоугольники не пересекаются");
        }
    }

    static bool CheckPolygonIntersection(double[] polygon1, double[] polygon2)
    {
        // Проверяем пересечение каждой стороны первого многоугольника со сторонами второго многоугольника
        for (int i = 0; i < polygon1.Length; i += 2)
        {
            double x1 = polygon1[i];
            double y1 = polygon1[i + 1];

            double x2 = polygon1[(i + 2) % polygon1.Length];
            double y2 = polygon1[(i + 3) % polygon1.Length];

            for (int j = 0; j < polygon2.Length; j += 2)
            {
                double x3 = polygon2[j];
                double y3 = polygon2[j + 1];

                double x4 = polygon2[(j + 2) % polygon2.Length];
                double y4 = polygon2[(j + 3) % polygon2.Length];

                if (CheckLineIntersection(x1, y1, x2, y2, x3, y3, x4, y4))
                {
                    return true;
                }
            }
        }

        return false;
    }

    static bool CheckLineIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
    {
        // Реализация функции CheckLineIntersection
        // ...
    }
}

Вот пример реализации функции CheckLineIntersection, которая определяет пересечение двух линий или отрезков на основе их координат:

csharp
static bool CheckLineIntersection(double x1, double y1, double x2, double y2)
{
    // Проверяем, что линии не являются вертикальными
    if (x1 != x2)
    {
        // Вычисляем коэффициенты наклона и свободные члены уравнений прямых, содержащих линии
        double slope1 = (y2 - y1) / (x2 - x1);
        double intercept1 = y1 - slope1 * x1;

        // Проверяем, что вторая линия не является вертикальной
        if (x3 != x4)
        {
            // Вычисляем коэффициенты наклона и свободные члены уравнений прямых, содержащих линии
            double slope2 = (y4 - y3) / (x4 - x3);
            double intercept2 = y3 - slope2 * x3;

            // Проверяем, что прямые не параллельны
            if (slope1 != slope2)
            {
                // Вычисляем координаты точки пересечения прямых
                double intersectionX = (intercept2 - intercept1) / (slope1 - slope2);
                double intersectionY = slope1 * intersectionX + intercept1;

                // Проверяем, что точка пересечения находится внутри отрезков
                if (intersectionX >= Math.Min(x1, x2) && intersectionX <= Math.Max(x1, x2) &&
                    intersectionX >= Math.Min(x3, x4) && intersectionX <= Math.Max(x3, x4) &&
                    intersectionY >= Math.Min(y1, y2) && intersectionY <= Math.Max(y1, y2) &&
                    intersectionY >= Math.Min(y3, y4) && intersectionY <= Math.Max(y3, y4))
                {
                    return true;
                }
            }
        }
    }

    return false;
}

Исправление Rossiks, :

Вот что выдаёт бесплатный ИИ из телеги:

Вот пример программы на C#, которая принимает в аргументах массивы географических координат в виде чисел с плавающей запятой и определяет пересечение многоугольников:

csharp
using System;

class Program
{
    static void Main(string[] args)
    {
        // Проверяем, что количество аргументов равно 4 (два многоугольника)
        if (args.Length != 4)
        {
            Console.WriteLine("Неверное количество аргументов");
            return;
        }

        // Проверяем, что каждый аргумент содержит 8 координат (4 точки)
        for (int i = 0; i < args.Length; i++)
        {
            string[] coordinates = args[i].Split(',');
            if (coordinates.Length != 8)
            {
                Console.WriteLine($"Неверное количество координат в аргументе {i + 1}");
                return;
            }
        }

        // Получаем координаты первого многоугольника
        double[] polygon1 = Array.ConvertAll(args[0].Split(','), double.Parse);

        // Получаем координаты второго многоугольника
        double[] polygon2 = Array.ConvertAll(args[1].Split(','), double.Parse);

        // Проверяем пересечение многоугольников
        bool intersection = CheckPolygonIntersection(polygon1, polygon2);

        // Выводим результат
        if (intersection)
        {
            Console.WriteLine("Многоугольники пересекаются");
        }
        else
        {
            Console.WriteLine("Многоугольники не пересекаются");
        }
    }

    static bool CheckPolygonIntersection(double[] polygon1, double[] polygon2)
    {
        // Проверяем пересечение каждой стороны первого многоугольника со сторонами второго многоугольника
        for (int i = 0; i < polygon1.Length; i += 2)
        {
            double x1 = polygon1[i];
            double y1 = polygon1[i + 1];

            double x2 = polygon1[(i + 2) % polygon1.Length];
            double y2 = polygon1[(i + 3) % polygon1.Length];

            for (int j = 0; j < polygon2.Length; j += 2)
            {
                double x3 = polygon2[j];
                double y3 = polygon2[j + 1];

                double x4 = polygon2[(j + 2) % polygon2.Length];
                double y4 = polygon2[(j + 3) % polygon2.Length];

                if (CheckLineIntersection(x1, y1, x2, y2, x3, y3, x4, y4))
                {
                    return true;
                }
            }
        }

        return false;
    }

    static bool CheckLineIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
    {
        // Реализация функции CheckLineIntersection из предыдущего ответа
        // ...
    }
}

Исходная версия Rossiks, :

Вот что выдаёт бесплатный ИИ из телеги:

[code=c] Вот пример программы на C#, которая принимает в аргументах массивы географических координат в виде чисел с плавающей запятой и определяет пересечение многоугольников:

csharp using System;

class Program { static void Main(string[] args) { // Проверяем, что количество аргументов равно 4 (два многоугольника) if (args.Length != 4) { Console.WriteLine(«Неверное количество аргументов»); return; }

    // Проверяем, что каждый аргумент содержит 8 координат (4 точки)
    for (int i = 0; i < args.Length; i++)
    {
        string[] coordinates = args[i].Split(',');
        if (coordinates.Length != 8)
        {
            Console.WriteLine($"Неверное количество координат в аргументе {i + 1}");
            return;
        }
    }

    // Получаем координаты первого многоугольника
    double[] polygon1 = Array.ConvertAll(args[0].Split(','), double.Parse);

    // Получаем координаты второго многоугольника
    double[] polygon2 = Array.ConvertAll(args[1].Split(','), double.Parse);

    // Проверяем пересечение многоугольников
    bool intersection = CheckPolygonIntersection(polygon1, polygon2);

    // Выводим результат
    if (intersection)
    {
        Console.WriteLine("Многоугольники пересекаются");
    }
    else
    {
        Console.WriteLine("Многоугольники не пересекаются");
    }
}

static bool CheckPolygonIntersection(double[] polygon1, double[] polygon2)
{
    // Проверяем пересечение каждой стороны первого многоугольника со сторонами второго многоугольника
    for (int i = 0; i < polygon1.Length; i += 2)
    {
        double x1 = polygon1[i];
        double y1 = polygon1[i + 1];

        double x2 = polygon1[(i + 2) % polygon1.Length];
        double y2 = polygon1[(i + 3) % polygon1.Length];

        for (int j = 0; j < polygon2.Length; j += 2)
        {
            double x3 = polygon2[j];
            double y3 = polygon2[j + 1];

            double x4 = polygon2[(j + 2) % polygon2.Length];
            double y4 = polygon2[(j + 3) % polygon2.Length];

            if (CheckLineIntersection(x1, y1, x2, y2, x3, y3, x4, y4))
            {
                return true;
            }
        }
    }

    return false;
}

static bool CheckLineIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
{
    // Реализация функции CheckLineIntersection из предыдущего ответа
    // ...
}

}

[/code]