Учитывая две точки на плоскости и радиус, обычно через две точки могут быть проведены два круга заданного радиуса.
Исключения: радиус нуля должен рассматриваться как никогда не описывающий круги (за исключением случая, когда точки совпадают). Если точки совпадают, то может быть проведено бесконечное число кругов с точкой на их окружности, если радиус не равен нулю, а затем сворачивает круги в точку. Если точки образуют диаметр, верните один круг. Если точки слишком далеки друг от друга, круги не могут быть нарисованы. Задача: выполнить функцию, которая принимает две точки и радиус и возвращает два круга через эти точки. Для каждого результирующего круга укажите координаты для центра каждого круга, округленного до четырех десятичных цифр. Возвращает каждую координату в виде массива и координирует ее как массив массивов. Для краевых случаев возвращайте следующее: если точки находятся на диаметре, верните одну точку. Если радиус также равен нулю, верните"Radius Zero"
. Если точки совпадают, верните "Coincident point. Infinite solutions"
. Если точки находятся дальше друг от друга, чем диаметр, верните "No intersection. Points further apart than circle diameter"
. Примеры входов: p1 p2 r 0,1234, 0,9876 0,8765, 0,2345 2,0 0,0000, 2,0000 0,0000, 0,0000 1,0 0,1234, 0,9876 0,1234, 0,9876 2,0 0,1234, 0,9876 0,8765, 0,2345 0,5 0,1234, 0,9876 0,1234, 0,9876 0,0Ref: Поиск центра круга из двух точек и радиуса из математического форума @ Drexel
"Radius Zero"
."Coincident point. Infinite solutions"
."No intersection. Points further apart than circle diameter"
.p1 p2 r 0.1234, 0.9876 0.8765, 0.2345 2.0 0.0000, 2.0000 0.0000, 0.0000 1.0 0.1234, 0.9876 0.1234, 0.9876 2.0 0.1234, 0.9876 0.8765, 0.2345 0.5 0.1234, 0.9876 0.1234, 0.9876 0.0
getCircles
is a function.
testString: assert(typeof getCircles === 'function');
- text: getCircles([0.1234, 0.9876], [0.8765, 0.2345], 2.0)
should return [[1.8631, 1.9742], [-0.8632, -0.7521]]
.
testString: assert.deepEqual(getCircles(...testCases[0]), answers[0]);
- text: getCircles([0.0000, 2.0000], [0.0000, 0.0000], 1.0)
should return [0, 1]
testString: assert.deepEqual(getCircles(...testCases[1]), answers[1]);
- text: getCircles([0.1234, 0.9876], [0.1234, 0.9876], 2.0)
should return Coincident point. Infinite solutions
testString: assert.deepEqual(getCircles(...testCases[2]), answers[2]);
- text: getCircles([0.1234, 0.9876], [0.8765, 0.2345], 0.5)
should return No intersection. Points further apart than circle diameter
testString: assert.deepEqual(getCircles(...testCases[3]), answers[3]);
- text: getCircles([0.1234, 0.9876], [0.1234, 0.9876], 0.0)
should return Radius Zero
testString: assert.deepEqual(getCircles(...testCases[4]), answers[4]);
```