Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
1 / 1 / 0
Регистрация: 22.03.2019
Сообщений: 59

Проверка пересечения отрезков

12.04.2019, 19:15. Показов 6746. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Какой наиболее эффективный способ проверить пересекаются ли отрезки?
Я использовал метод, изложенный ниже:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Segment
{
    public int X;
    public int Y;
 
        public bool AreSegmentsIntersected(Segment anotherSegment)
        {
            var minLeftBorder = Math.Min(X, anotherSegment.X);
            var maxRightBorder = Math.Max(Y, anotherSegment.Y);
            var thisSegmentLength = Y - X;
            var anotherSegmentLength = anotherSegment.Y - anotherSegment.X;
            var maxMinBorderDistance = maxRightBorder - minLeftBorder;
            var totalLength = thisSegmentLength + anotherSegmentLength;
            return totalLength >= maxMinBorderDistance;
        }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2019, 19:15
Ответы с готовыми решениями:

Проверка пересечения отрезков и триангуляция
Здравствуйте, господа! У меня стоит задача сделать программу, делающую триангуляцию точек, проставленных на форме. проблема заключается в...

Нахождение точки пересечения двух отрезков заданных координатами
Есть ли у кого решение на нахождение точки пересечения двух отрезков заданных координатами A(x1,y1,z1) и B(x2,y2,z2)? Спасибо.

Проверка пересечения фигур
Всех приветствую. У меня возникла такая проблема, мне необходимо нарисованный полигон проверить на наличие пересечений с расставленными на...

7
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
12.04.2019, 19:24
Цитата Сообщение от Inochiron Посмотреть сообщение
Я использовал метод, изложенный ниже:
Насколько понял Вы рассматриваете только вариант X <= Y. Но может быть и наоборот. Или надо вместо полей использовать свойства в сеттерах которых проводить нормализацию
0
1 / 1 / 0
Регистрация: 22.03.2019
Сообщений: 59
12.04.2019, 19:27  [ТС]
Моя вина. Этого не понятно из кода. Но X это начало отрезка, а Y это конец.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
12.04.2019, 19:27
Лучший ответ Сообщение было отмечено Inochiron как решение

Решение

При условии, что X, Y нормализованы, то
C#
1
2
3
public bool AreSegmentsIntersected(Segment anotherSegment)=>
         anotherSegment.X >=X && anotherSegment.X <=Y
       || anotherSegment.Y >=X && anotherSegment.Y <=Y;
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
12.04.2019, 19:28
Цитата Сообщение от Inochiron Посмотреть сообщение
Этого не понятно из кода. Но X это начало отрезка, а Y это конец.
Из кода-то понятно, но у Вас он не доделан.
0
1 / 1 / 0
Регистрация: 22.03.2019
Сообщений: 59
12.04.2019, 19:33  [ТС]
Вот так правильней
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Segment
{
    public int start;
    public int end;
 
        public bool AreSegmentsIntersected(Segment anotherSegment)
        {
            var minLeftBorder = Math.Min(start, anotherSegment.start);
            var maxRightBorder = Math.Max(end, anotherSegment.end);
            var thisSegmentLength = end - start;
            var anotherSegmentLength = anotherSegment.end - anotherSegment.start
            var maxMinBorderDistance = maxRightBorder - minLeftBorder;
            var totalLength = thisSegmentLength + anotherSegmentLength;
            return totalLength >= maxMinBorderDistance;
        }
}
Добавлено через 3 минуты
Спасибо
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
12.04.2019, 19:34
Цитата Сообщение от Inochiron Посмотреть сообщение
Вот так правильней
Нет - не такой.

Должна быть примерно такая реализация
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Segment
{
    private int _x;
    private int _y;
 
    public int X
    {
         get => _x;
         set
         {
                if (value <= Y)
                   _x = value;
                else 
                   (_x, _y) = (Y, value);
          }
     }
    public int Y
    {
         get => _y;
         set
         {
                if (value >= X)
                   _y = value;
                else 
                   (_x, _y) = (value, X);
          }
     }
 
     // Другие свойства и методы
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
12.04.2019, 19:44
Мой метод не верный. Наверное.
У меня проверяется лежит ли один из концов отрезка на другом отрезке.

Вам же для "пересечение" надо любое совпадение отрезков? Даже если один лежит целиком внутри другого?

Добавлено через 2 минуты
Если да, то надо дополнить
C#
1
2
3
4
public bool AreSegmentsIntersected(Segment anotherSegment)=>
         anotherSegment.X >= X && anotherSegment.X <= Y
       || anotherSegment.Y >= X && anotherSegment.Y <= Y
       || anotherSegment.X < X && anotherSegment.Y > Y;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2019, 19:44
Помогаю со студенческими работами здесь

Проверка пересечения фигур
Здравствуйте. Подскажите как проверить пересекаются ли фигуры на координатной плоскости? Фигуры типа: квадрат, ромб, треугольник. Заданы...

Проверка двух треугольников на отсутствие пересечения
пожалуйста подскажите как написать программу . иначе пойду на пересдачу( Проверка двух треугольников на отсутствие пересечения в R^2 ...

Проверка пересечения отрезков
Народ помогите нужно написать в visual studio приложение windows form. Даны координаты концов двух отрезков нужно определить пересекаются...

Проверка пересечения двух отрезков
Помогите разобраться Выдает ошибку &quot;floating division by zero&quot; и перепрыгивает на строчку (y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);) ...

Точка пересечения отрезков
Пересекаются ли отрезки заданными координатами (x1;y1),(x2;y2),(x3;y3),(x4;y4)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru