// пересечение прямой и окружности public static List <Point> Intersection(Straight straight, Circle circle) { List <Point> points = new List <Point>(); Point circleCenterPoint = circle.getCurvePoint(); //получение координат центра окружности double firstcirclePtX = circleCenterPoint.getX(); double firstcirclePtY = circleCenterPoint.getY(); //получение радиуса double radius = circle.getRadius(); Point firstLinePoint = straight.getCurvePoint(); //получение координат прямой double firstLinePtX = firstLinePoint.getX(); double firstLinePtY = firstLinePoint.getY(); //получение направляющего вектора прямой double firstP1 = straight.getP1(); double firstP2 = straight.getP2(); Point zeroPoint = straight.PointCalcul(0); // случайная точка на прямой 1 Point randomPoint = straight.PointCalcul(new Random().Next(1, 10)); // случайная точка на прямой 2 // получение центральной точки на прямой Point middle = new Point(zeroPoint.getX() - randomPoint.getX(), zeroPoint.getY() - randomPoint.getY()); //расстояние от центра окружности до центральной точки double distance = Math.Abs(middle.getY() * firstcirclePtX + middle.getX() * firstcirclePtY + (zeroPoint.getY() * randomPoint.getX() - randomPoint.getY() * zeroPoint.getX())) / Math.Sqrt(Math.Pow(middle.getY(), 2) + Math.Pow(middle.getX(), 2)); // расчет точек if (distance <= radius) { points.Add(new Point(2 * Math.Asin(distance / radius), 2 * Math.Acos(distance / radius))); if (distance < radius) { points.Add(new Point((2 * Math.Asin(distance / radius) - distance), (2 * Math.Acos(distance / radius) - distance))); } } return(points); }
static void Main(string[] args) { Straight firstStraight = new Straight(5, 6, 7, 8); Straight secondStraight = new Straight(1, 2, 3, 4); firstStraight.ClosedCurve(); firstStraight.PointCalcul(5); firstStraight.TangentCalcul(5); Circle firstCircle = new Circle(5, 8, 3); Circle secondCircle = new Circle(3, 7, 13); firstCircle.ClosedCurve(); firstCircle.PointCalcul(8); firstCircle.TangentCalcul(8); printIntersectionPoints("Прямая и прямая", Intersection(firstStraight, secondStraight)); printIntersectionPoints("Окружность и окружность", Intersection(firstCircle, secondCircle)); printIntersectionPoints("Прямая и окружность", Intersection(firstStraight, secondCircle)); Console.ReadKey(); }