Su tarea es programar una función matemática s
, que toma un conjunto finito A
de puntos no vacíos en el plano 2D, y genera un puntaje de circularidad s(A)
que satisface las siguientes propiedades:
- Definitividad positiva : si hay un círculo o una línea recta que contiene todos los puntos de
A
, entoncess(A) = 0
. De otra maneras(A) > 0
Surjectividad: es surjective a los números reales no negativos, lo que significa que para cada número real no negativo
r
hay un subconjunto finitoA
del plano tal ques(A) = r
.Invariancia de traducción:
s
es invariante de traducción sis(A) = s(A + v)
para cada vectorv
y para todosA
.Invarianza de escala:
s
es invariante de escala, sis(A) = s(A * t)
para todost≠0
y para todosA
.Continuidad.
s
se dice que es continua si la funciónf(p) := s(A ∪ {p})
(mapear un puntop
a un número real) es continua usando el valor absoluto estándar en los números reales y la norma euclidiana estándar en los puntos del plano.
Hablando intuitivamente, esta puntuación de falta de circularidad puede considerarse como algo similar al coeficiente de correlación en la regresión lineal.
Detalles
Su función en teoría tiene que funcionar en los reales, pero para el propósito de este desafío puede usar números de coma flotante como sustituto. Proporcione una explicación de su envío y un argumento de por qué se mantienen esas cinco propiedades. Puede tomar dos listas de coordenadas o una lista de tuplas o formatos similares como entrada. Puede suponer que no se repite ningún punto en la entrada, es decir, todos los puntos son únicos.
s
que no es único. Lo único para lo que podría hacer ejemplos es paras(A) = 0
qué es trivial hacerlo usando la primera propiedad.Respuestas:
Python 2 con numpy, 116 bytes
Toma x e y como vectores de columna 2d y devuelve una matriz que contiene la respuesta. Tenga en cuenta que esto dará una matriz vacía para una línea perfectamente recta o con 3 o menos puntos. Creo que lstsq no da residuos si hay un ajuste perfecto.
Explicación
Esencialmente, esto encuentra el círculo de mejor ajuste y obtiene los residuos al cuadrado.
Queremos minimizar
(x - x_center)^2 + (y - y_center)^2 - R^2
. Se ve desagradable y no lineal, pero puede volver a escribir que a medidax_center(-2x) + y_center(-2y) + stuff = x^2 + y^2
, donde elstuff
sigue siendo desagradable y no lineal en términos dex_center
,y_center
yR
, aunque no es necesario preocuparse por ello. Entonces podemos resolverlo[-2x -2y 1][x_center, y_center, stuff]^T = [x^2 + y^2]
.Entonces podríamos retroceder R si realmente quisiéramos, pero eso no nos ayuda mucho aquí. Afortunadamente, la función lstsq puede darnos los residuos, que satisfacen la mayoría de las condiciones. Restar el centro y escalar
(R^2)^2 = R^4 ~ x^4
nos da invariancia traslacional y de escala.fuente
f(array([[1.0],[2.0],[3.0],[4.0]]),array([[0.0],[0.0],[0.0],[t]]))
parece darmearray([ 0.00925926])
todo lo que no sea cerot
. (Sé que dijiste que esto se rompe para t = 0, pero el resultado al menos debería acercarse a 0 para t → 0.) ¿Lo estoy llamando mal?Python, 124 bytes
Toma A como una secuencia de números complejos (
x + 1j*y
), y resume Im ( r ) 2 /2 | r | para todas las relaciones cruzadas complejas r de cuatro puntos en A .Propiedades
Definitividad positiva. Todos los términos no son negativos, y todos son cero exactamente cuando todas las relaciones cruzadas son reales, lo que sucede cuando los puntos son colineales o cíclicos.
Surjetividad Dado que la suma puede hacerse arbitrariamente grande agregando muchos puntos, la surjectividad seguirá a partir de la continuidad.
Invariancia de traducción. La relación cruzada es invariante de traducción.
Invarianza de escala. La relación cruzada es invariante de escala. (De hecho, es invariable en todas las transformaciones de Möbius).
Continuidad. La razón doble es un mapa continuo al plano complejo extendido, y r ↦ Im ( r ) 2 /2 | r | (con ∞ ↦ 0) es un mapa continuo desde el plano complejo extendido hasta los reales.
(Nota: un mapa teóricamente más bonito con las mismas propiedades es r ↦ (Im ( r ) / ( C + | r | 2 )) 2 , cuyas líneas de contorno wrt los cuatro puntos de la relación cruzada son circulares. Si realmente necesita una medida poco circular, probablemente quieras esa).
fuente