Как определить координаты точек пересечения прямоугольника и круга - 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;
}