Найти точку пересечения прямой и окружности - C#

Узнай цену своей работы

Формулировка задачи:

Задана окружность с центром в точке O(0,0) и радиусом R0, и прямая y = ax+b. Определить, пересекаются ли прямая и окружность. Если пересекаются, найти точку пересечения.

Решение задачи: «Найти точку пересечения прямой и окружности»

textual
Листинг программы
class Programm
    {
        /*Circle properties*/
        static double x0, y0, r;
        /*Line properties*/
        static double k, p;
 
        public static void Main()
        {
            /*Init circle*/
            init("x0  = ", out x0);
            init("y0  = ", out y0);
            init("r   = ", out r);
 
            /*Init line*/
            init("k  = ", out k);
            init("p  = ", out p);
 
            double a = square(k) + 1;
            double b = 2 * (k * (p - y0) - x0);
            double c = square(b - y0) + square(x0) - square(r);
 
            double x1, x2;
            if (trySolutionSquareEquation(a, b, c, out x1, out x2))
            {
                Console.WriteLine("First point : [{0};{1}]", x1, y(x1));
                Console.WriteLine("Second point : [{0};{1}]", x2, y(x2));
            }
            else
            {
                Console.WriteLine("Equation not have solution");                
            }
            Console.ReadLine();
        }
 
        /*Function of line*/
        private static double y(double x)
        {
            return k * x + p;
        }
 
        /*Get square of value*/
        private static double square(double value)
        {
            return Math.Pow(value, 2.0);
        }
 
        /*Solving equation*/
        private static bool trySolutionSquareEquation(double a, double b, double c, out double x1, out double x2)
        {
            x1 = double.NaN;
            x2 = double.NaN;
 
            double discriminant = b * b - 4 * a * c;
            if (discriminant < 0)
            {
                return false;
            }
 
            double k = -b / 2 * a;
            discriminant /= 2 * a;
            x1 = k - Math.Sqrt(discriminant);
            x2 = k + Math.Sqrt(discriminant);
 
            return true;
        }
 
        private static void init(string message, out double value)
        {
            Console.Write(message);
            value = readDoubleFromTerminale();
        }
 
         private static double readDoubleFromTerminale()
        {
            string doubleString;
            double doubleValue;
            do
            {
                doubleString = Console.ReadLine();
            } 
            while (!Double.TryParse(doubleString, out doubleValue));
            
            return doubleValue;
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы