Ваша задача - запрограммировать математическую функцию s
, которая принимает непустой конечный набор A
точек в 2D-плоскости и выводит показатель округлости, s(A)
который удовлетворяет следующим свойствам:
- Положительная определенность : если есть круг или прямая, которая содержит все точки
A
, тоs(A) = 0
. В противном случаеs(A) > 0
Сюръективность: она сюръективна с неотрицательными действительными числами, что означает, что для каждого неотрицательного действительного числа
r
существует конечное подмножествоA
плоскости, такое чтоs(A) = r
.Инвариантность перевода:
s
инвариантнаs(A) = s(A + v)
к переводу, если для каждого вектораv
и для всехA
.Масштабная инвариантность:
s
масштабно инвариантна, еслиs(A) = s(A * t)
для всехt≠0
и для всехA
.Непрерывность.
s
называется непрерывной, если функцияf(p) := s(A ∪ {p})
(отображающая точкуp
в действительное число) является непрерывной, используя стандартное абсолютное значение для действительных чисел и стандартную евклидову норму в точках плоскости.
Интуитивно говоря, этот показатель некруглости можно представить как нечто похожее на коэффициент корреляции в линейной регрессии.
Детали
Ваша функция в теории должна работать в реальных значениях, но для этой задачи вы можете использовать числа с плавающей запятой в качестве замены. Пожалуйста, предоставьте объяснение вашего представления и аргумент, почему эти пять свойств имеют место. Вы можете взять два списка координат или список кортежей или аналогичных форматов в качестве входных данных. Вы можете предположить, что ни одна точка на входе не повторяется, т.е. все точки уникальны.
s
как не является уникальным. Единственное, к чему вы могли бы привести примеры, - s(A) = 0
это тривиально, используя первое свойство.