Votre tâche consiste à programmer une fonction mathématique s
, qui prend un ensemble fini non vide A
de points dans le plan 2D et génère un score d'incircularité s(A)
qui satisfait les propriétés suivantes:
- Définition positive : S'il y a un cercle ou une ligne droite qui contient tous les points de
A
, alorss(A) = 0
. Autrements(A) > 0
Surjectivité: elle est surjective aux nombres réels non négatifs, ce qui signifie que pour chaque nombre réel non négatif,
r
il existe un sous-ensemble finiA
du plan tel ques(A) = r
.Invariance de traduction:
s
est invariante de traduction sis(A) = s(A + v)
pour chaque vecteurv
et pour tousA
.Invariance d'échelle:
s
est invariante d'échelle, sis(A) = s(A * t)
pour toust≠0
et pour tousA
.Continuité.
s
est dit continu si la fonctionf(p) := s(A ∪ {p})
(mappant le point ap
sur un nombre réel) est continue en utilisant la valeur absolue standard sur les nombres réels, et la norme euclidienne standard sur les points du plan.
Intuitivement, ce score d'incircularité peut être considéré comme quelque chose de similaire au coefficient de corrélation dans la régression linéaire.
Détails
Votre fonction doit en théorie fonctionner dans les réels, mais pour ce défi, vous pouvez utiliser des nombres à virgule flottante comme substitut. Veuillez fournir une explication de votre soumission et un argument expliquant pourquoi ces cinq propriétés sont détenues. Vous pouvez prendre deux listes de coordonnées ou une liste de tuples ou de formats similaires en entrée. Vous pouvez supposer qu'aucun point de l'entrée n'est répété, c'est-à-dire que tous les points sont uniques.
s
n'est pas unique. La seule chose pour laquelle vous pourriez faire des exemples ests(A) = 0
ce qui est trivial à faire en utilisant la première propriété.Réponses:
Python 2 avec numpy, 116 octets
Prend x et y comme vecteurs de colonne 2D et renvoie un tableau contenant la réponse. Notez que cela donnera un tableau vide pour une ligne parfaitement droite ou avec 3 points ou moins. Je pense que lstsq ne donne aucun résidu s'il y a un ajustement parfait.
Explication
Essentiellement, cela trouve le cercle du meilleur ajustement et obtient les résidus au carré.
Nous voulons minimiser
(x - x_center)^2 + (y - y_center)^2 - R^2
. Il semble méchant et non linéaire, mais on peut réécrire quex_center(-2x) + y_center(-2y) + stuff = x^2 + y^2
, oùstuff
est toujours méchant et non linéaire en termes dex_center
,y_center
etR
, mais on n'a pas besoin de se soucier de lui. Nous pouvons donc simplement résoudre[-2x -2y 1][x_center, y_center, stuff]^T = [x^2 + y^2]
.Nous pourrions alors reculer R si nous le voulions vraiment, mais cela ne nous aide pas beaucoup ici. Heureusement, la fonction lstsq peut nous donner les résidus, ce qui satisfait la plupart des conditions. La soustraction du centre et de l'échelle par
(R^2)^2 = R^4 ~ x^4
nous donne l'invariance de translation et d'échelle.la source
f(array([[1.0],[2.0],[3.0],[4.0]]),array([[0.0],[0.0],[0.0],[t]]))
semble me donnerarray([ 0.00925926])
pour tout différent de zérot
. (Je sais que vous avez dit que cela casse pour t = 0, mais le résultat devrait au moins approcher 0 pour t → 0.) Est-ce que je l'appelle mal?Python, 124 octets
Prend A forme d' une séquence de nombres complexes (
x + 1j*y
), et résume Im ( r ) deux / deux | r | pour tous les rapports croisés complexes r de quatre points dans A .Propriétés
Définition positive. Tous les termes sont non négatifs et ils sont tous nuls exactement lorsque tous les rapports croisés sont réels, ce qui se produit lorsque les points sont colinéaires ou concycliques.
Surjectivité. Puisque la somme peut être rendue arbitrairement grande en ajoutant de nombreux points, la surjectivité découlera de la continuité.
Invariance de traduction. Le rapport croisé est invariant par translation.
Invariance d'échelle. Le rapport croisé est invariant à l'échelle. (En fait, il est invariant sous toutes les transformations de Möbius.)
Continuité. Le rapport croisé est une carte continue au plan complexe étendu, et r ↦ Im ( r ) deux / deux | r | (avec ∞ ↦ 0) est une carte continue du plan complexe étendu aux réels.
(Remarque: une carte théoriquement plus jolie avec les mêmes propriétés est r ↦ (Im ( r ) / ( C + | r | 2 )) 2 , dont les lignes de contour par rapport aux quatre points du rapport croisé sont circulaires. Si vous avez réellement besoin une mesure d'incircularité, vous voulez probablement celle-là.)
la source