Розробити програму, яка визначає, перетинаються два кола чи ні.
Вхідні дані програми: координати центрів кіл та їх радіуси. Вихідні дані: рядок «кола перетинаються» чи « кола не перетинаються» в залежності від вхідних даних. У випадку перетину, вивести кількість точок перетину.
Код програми для визначення перетинаються кола чи ні
using System;
// Точка
public class Point
{
public Point(double x, double y)
{
X = x;
Y = y;
}
public double X { get; private set; }
public double Y { get; private set; }
// Відстань до точки
public double DistanceTo(Point other)
{
return Math.Sqrt(Math.Pow(X - other.X, 2) + Math.Pow(Y - other.Y, 2));
}
}
// Перетин
public enum Intersect
{
NotIntersect,
OnePoint,
TwoPoint,
Same
}
// Коло
public class Circle
{
public Circle(double x, double y, double r) : this(new Point(x, y), r)
{
}
public Circle(Point center, double radius)
{
Center = center;
Radius = radius;
}
public Point Center { get; private set; }
public double Radius { get; private set; }
public Intersect IntersectWith(Circle other)
{
Intersect result;
var distance = Center.DistanceTo(other.Center);
// Кола співпадають(це одне і те саме коло)
if (distance == 0 && Radius == other.Radius)
{
result = Intersect.Same;
}
// Кола не доторкаються одне одного
else if (distance > Radius + other.Radius)
{
result = Intersect.NotIntersect;
}
// Одне коло міститься в іншому та не доторкаються
else if (distance < Math.Abs(Radius - other.Radius))
{
result = Intersect.NotIntersect;
}
// Кола доторкаються в одній точці
else if ((distance == Radius + other.Radius) || (distance == Math.Abs(Radius - other.Radius)))
{
result = Intersect.OnePoint;
}
// Кола перетинаються в двох точках
else
{
result = Intersect.TwoPoint;
}
return result;
}
}
class Program
{
private static Circle CircleFromConsole(string name)
{
Console.Write("Введіть координату X центра кола {0}: ", name);
var x = double.Parse(Console.ReadLine());
Console.Write("Введіть координату Y центра кола {0}: ", name);
var y = double.Parse(Console.ReadLine());
var p = new Point(x, y);
Console.Write("Введіть радіус кола {0}: ", name);
var radius = double.Parse(Console.ReadLine());
return new Circle(p, radius);
}
private static string IntersectToString(Intersect intersect)
{
switch (intersect)
{
case Intersect.NotIntersect:
return "Кола не перетинаються";
case Intersect.OnePoint:
return "Кола перетинаються(дотикаються) в одній точці";
case Intersect.TwoPoint:
return "Кола перетинаються в двох точках";
case Intersect.Same:
return "Кола співпадають";
default: throw new ArgumentException();
}
}
public static void Main()
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
var a = CircleFromConsole("A");
var b = CircleFromConsole("B");
var intersectResult = a.IntersectWith(b);
Console.WriteLine(IntersectToString(intersectResult));
Console.ReadLine();
}
}