Как определить координаты точек пересечения прямоугольника и круга - C#

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

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

Всем привет Как решить такую задачку....на первый взгляд вроде лёгкая,но как только начал углубляться,то застрял...помогите Заданные три точки на плоскости P1, P2, P3 своими декартовыми координатами - x и y. Точки P1 и P2 задают левый нижний угол и правый верхний угол прямоугольника R1 со сторонами, параллельными осям координат. Точка P3 задает центр окружности радиуса r. Определить, пересекаются ли прямоугольник R1 и круг. Если является сечение, то определить координаты точек пересечения.

Решение задачи: «Как определить координаты точек пересечения прямоугольника и круга»

textual
Листинг программы
  1.         public static void Main(string[] args)
  2.         {
  3.             Point start = new Point(4, 1);
  4.             Point end = new Point(8, 4);
  5.             Point circle = new Point(0, 0);
  6.             double r = 2;
  7.  
  8.             Console.WriteLine(Intersect(start, end, circle, r));
  9.         }
  10.  
  11.         struct Point
  12.         {
  13.             public double x, y;
  14.  
  15.             public Point(double y, double x) : this()
  16.             {
  17.                 this.y = y;
  18.                 this.x = x;
  19.             }
  20.  
  21.             public static Point operator -(Point p1, Point p2)
  22.             {
  23.                 return new Point(p1.x - p2.x, p1.y - p2.y);
  24.             }
  25.         }
  26.  
  27.         private static bool Intersect(Point lineStart, Point lineEnd, Point circleCenter, double radius)
  28.         {
  29.             lineStart -= circleCenter;
  30.             lineEnd -= circleCenter;
  31.  
  32.             Point delta = lineEnd - lineStart;
  33.  
  34.             double a = delta.x*delta.x + delta.y*delta.y;
  35.             double b = 2*(lineStart.x*delta.x + lineStart.y*delta.y);
  36.             double c = lineStart.x*lineStart.x + lineStart.y*lineStart.y - radius*radius;
  37.  
  38.             if (-b < 0) return c < 0;
  39.             if (-b < 2*a) return 4*a*c - b*b < 0;
  40.             return a + b + c < 0;
  41.         }

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


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

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

10   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы