Как определить координаты точек пересечения прямоугольника и круга - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д