Sua tarefa é programar uma função matemática s
, que recebe um conjunto finito não vazio A
de pontos no plano 2D e gera uma pontuação de incircularidade s(A)
que satisfaz as seguintes propriedades:
- Definição positiva : se houver um círculo ou uma linha reta que contenha todos os pontos de
A
, entãos(A) = 0
. De outra formas(A) > 0
Surjectividade: É um adjetivo para os números reais não negativos, ou seja, para cada número real não negativo,
r
existe um subconjunto finitoA
do plano, de modo ques(A) = r
.Invariância da tradução:
s
é invariável à tradução ses(A) = s(A + v)
para cada vetorv
e para todosA
.Invariância da escala:
s
é invariável à escala, se fors(A) = s(A * t)
para todost≠0
e para todosA
.Continuidade.
s
é considerado contínuo se a funçãof(p) := s(A ∪ {p})
(mapear o ponto ap
para um número real) for contínua usando o valor absoluto padrão nos números reais e a norma euclidiana padrão nos pontos do plano.
Intuitivamente, esse escore de falta de circularidade pode ser pensado como algo semelhante ao coeficiente de correlação na regressão linear.
Detalhes
Sua função na teoria precisa funcionar em reais, mas, para o objetivo desse desafio, você pode usar números de ponto flutuante como substituto. Forneça uma explicação do seu envio e um argumento sobre o motivo dessas cinco propriedades. Você pode usar duas listas de coordenadas ou uma lista de tuplas ou formatos semelhantes como entrada. Você pode assumir que nenhum ponto na entrada é repetido, ou seja, todos os pontos são únicos.
s
não é único. A única coisa para a qual você pode fazer exemplos é dos(A) = 0
que é trivial fazer usando a primeira propriedade.Respostas:
Python 2 com numpy, 116 bytes
Pega x e y como vetores de coluna 2D e retorna uma matriz que contém a resposta. Observe que isso dará uma matriz vazia para uma linha perfeitamente reta ou com 3 ou menos pontos. Acho que o lstsq não fornece resíduos se houver um ajuste perfeito.
Explicação
Essencialmente, isso encontra o círculo de melhor ajuste e obtém os resíduos ao quadrado.
Queremos minimizar
(x - x_center)^2 + (y - y_center)^2 - R^2
. Parece desagradável e não-linear, mas podemos reescrever isso comox_center(-2x) + y_center(-2y) + stuff = x^2 + y^2
, onde ostuff
ainda é desagradável e não-linear em termos dex_center
,y_center
eR
, mas nós não precisa se preocupar com isso. Para que possamos resolver[-2x -2y 1][x_center, y_center, stuff]^T = [x^2 + y^2]
.Poderíamos, então, recuar no R, se realmente quiséssemos, mas isso não nos ajuda muito aqui. Felizmente, a função lstsq pode nos fornecer os resíduos, o que satisfaz a maioria das condições. Subtrair o centro e dimensionar
(R^2)^2 = R^4 ~ x^4
nos fornece invariância translacional e de escala.fonte
f(array([[1.0],[2.0],[3.0],[4.0]]),array([[0.0],[0.0],[0.0],[t]]))
parece me dararray([ 0.00925926])
para todos que não sejam zerot
. (Eu sei que você disse que isso quebra para t = 0, mas o resultado deve pelo menos se aproximar de 0 para t → 0.) Estou chamando isso de errado?Python, 124 bytes
Toma Uma como uma sequência de números complexos (
x + 1j*y
), e resume Im ( R ) 2 /2 | r | para todos os cross-rácios complexos r de quatro pontos em um .Propriedades
Definitividade positiva. Todos os termos são não-negativos e todos são zero exatamente quando todas as relações cruzadas são reais, o que acontece quando os pontos são colineares ou concíclicos.
Surjectividade. Como a soma pode ser arbitrariamente grande, adicionando muitos pontos, a subjetividade seguirá da continuidade.
Invariância da tradução. A razão cruzada é invariável à tradução.
Invariância da escala. A relação cruzada é invariável em escala. (De fato, é invariável em todas as transformações de Möbius.)
Continuidade. A cruz-rácio é um mapa contínuo para o plano complexo estendido, e r ↦ Im ( R ) 2 /2 | r | (com ∞ ↦ 0) é um mapa contínuo do plano complexo estendido para os reais.
(Nota: Um mapa teoricamente mais bonito com as mesmas propriedades é r ↦ (Im ( r ) / ( C + | r | 2 )) 2 , cujas linhas de contorno nos quatro pontos da razão cruzada são circulares. uma medida de incircularidade, você provavelmente quer essa.)
fonte