Как определить координаты точек пересечения прямоугольника и круга - C#
Формулировка задачи:
Всем привет
Как решить такую задачку....на первый взгляд вроде лёгкая,но как только начал углубляться,то застрял...помогите
Заданные три точки на плоскости P1, P2, P3 своими декартовыми координатами - x и y. Точки P1 и P2 задают левый нижний угол и правый верхний угол прямоугольника R1 со сторонами, параллельными осям координат. Точка P3 задает центр окружности радиуса r. Определить, пересекаются ли прямоугольник R1 и круг. Если является сечение, то определить координаты точек пересечения.
Решение задачи: «Как определить координаты точек пересечения прямоугольника и круга»
textual
Листинг программы
- public static void Main(string[] args)
- {
- Point start = new Point(4, 1);
- Point end = new Point(8, 4);
- Point circle = new Point(0, 0);
- double r = 2;
- Console.WriteLine(Intersect(start, end, circle, r));
- }
- struct Point
- {
- public double x, y;
- public Point(double y, double x) : this()
- {
- this.y = y;
- this.x = x;
- }
- public static Point operator -(Point p1, Point p2)
- {
- return new Point(p1.x - p2.x, p1.y - p2.y);
- }
- }
- private static bool Intersect(Point lineStart, Point lineEnd, Point circleCenter, double radius)
- {
- lineStart -= circleCenter;
- lineEnd -= circleCenter;
- Point delta = lineEnd - lineStart;
- double a = delta.x*delta.x + delta.y*delta.y;
- double b = 2*(lineStart.x*delta.x + lineStart.y*delta.y);
- double c = lineStart.x*lineStart.x + lineStart.y*lineStart.y - radius*radius;
- if (-b < 0) return c < 0;
- if (-b < 2*a) return 4*a*c - b*b < 0;
- return a + b + c < 0;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д