Введение
Учитывая пять точек на плоскости, ваша задача - вычислить площадь эллипса, проходящего через эти точки.
Можно предположить, что ровно один невырожденный эллипс может быть построен с заданными входными значениями.
правила
Вводим 10
целые числа в любой удобной форме, соответствующей x
и y
координаты точек. Например, вы можете использовать входные данные как список 10
целых чисел [x1, y1, x2, y2, ..., x5, y5]
или как [[x1, y1], [x2, y2], ..., [x5, y5]]
, и т. Д. Вы также можете обрабатывать десятичные числа, но требуются только целые числа.
Выходные данные представляют площадь эллипса. Это может быть какое-то символическое выражение или десятичное значение с 8
точностью не менее цифры.
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах.
Пример ввода и вывода
Входные данные:
[-2, 3, 2, 5, 5, 3, 4, 0, 1, -3]
Вывод:
+62,15326783788685
Изображение эллипса, проходящего через эти точки:
Больше примеров:
f(60, -92, -31, -10, 78, -19, -27, -35, 91, -37) = 9882.59540465108
f(-9, -4, 7, 7, 10, 1, -7, -10, 0, 7) = 269.5966648188643
f(-3, 2, 0, -5, 4, 0, -4, 1, -1, 2) = 98.54937293879908
Ответы:
Mathematica,
878078 байтПринимает 5 входов:
[{x1, y1}, ... , {x5, y5}]
.Возвращает точное / символическое значение.
Как?
Пусть
f(x, y)
обозначим вектор(1, x, y, xy, x^2, y^2)
для некоторыхx, y
.Тогда определитель матрицы с векторными строками
[f(x, y), f(x1, y1), f(x2, y2), ..., f(x5, y5)]
равен нулю, если(x, y)
это точка на эллипсе, который мы ищем. т.е. определитель дает выражение для эллипса.Поскольку знак выражения может быть инвертирован, мы берем постоянное слагаемое и умножаем все выражение на знак постоянной. Таким образом, мы можем установить выражение больше 0, чтобы найти область.
источник
Sign
.MATLAB ,
130 124114 байтовВходные данные взяты в виде двух векторов столбцов, один для x- и один для y-координат. Этот метод использует регрессию наименьших квадратов, которая обеспечивает точный эллипс, если все точки находятся точно на эллипсе, а затем применяет приведенную здесь формулу (спасибо @orlp) для вычисления площади.
Добавляя следующие строки, вы даже можете построить кривую:
Попробуйте онлайн!
источник
Mathematica 84 байта
Я обнаружил, что это интересная проблема. Каждый эллипс является аффинным преобразованием единичного круга, который может быть параметризован как {x, y} = {Cos (t), Sin (t)}, поэтому точки на круге могут быть отображены в эллипс с помощью {xE, yE } = A {x, y} + B, где A - постоянная матрица, а B - вектор. Подстановка точек дает 10 скалярных уравнений и 11 скалярных неизвестных, но мы можем решить, что параметризация начинается при t = 0, поэтому система разрешима. Абсолютное значение определителя матрицы A - это отношение площади эллипса к единичной окружности, поэтому мы умножаем на Pi. Принимая Макс избавляется от негативного решения.
Применение:
Урожайность:
источник
Mathematica, 144 байта
работает для всех тестовых случаев
Пример ввода :
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
Результаты
-10 байт от JungHwan Min
± составляет 1 байт в кодировке окон по умолчанию [CP-1252]
источник
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
?(3575880 π)/(2351 Sqrt[2351])
что принято в качестве ответаClearAll
не исправить это. Да ладно, не беспокойся об этом, ха-ха. Пока это работает для вас. На какой версии Mathematica вы работаете?Desmos , 101 байт
Онлайн Desmos не любит многострочные пасты, поэтому вы должны вводить их по одной строке за раз, или
Попробуйте онлайн!
Ввод взят с двух списков
u
иv
. Вывод отображается в последней строке.Объяснение:
Третья строка определяет уравнение для любого эллипса, с радиусами
a
иb
, углом поворотаc
и смещением(h,k)
.Четвертая строка вычисляет регрессию
f
по спискамu
иv
, находя радиусыm
иn
, угол поворотаo
и смещение(p,q)
.A = pi*r1*r2
Вы также можете попробовать онлайн (другая ссылка) для слегка расширенной интерактивной визуальной версии. Вы можете перемещаться по пяти точкам и просматривать эллипс и область в режиме реального времени:
В качестве альтернативы, здесь есть более длинное решение с использованием этой формулы (аналогично ответу @ flawr ):
Desmos, 106 байт
Попробуйте онлайн!
источник
pi
в последней строке: если яmnpi
наберу, символ пи все равно появится. Кроме того, вы имеете в виду « вывод отображается в последней строке», а не ввод?mnpi
, даже если она произносит слова, когда я ее печатаю. И да, я имел в виду вывод, а не ввод, спасибо.