introduction
Étant donné cinq points dans le plan, votre tâche consiste à calculer l'aire de l'ellipse passant par ces points.
Vous pouvez supposer qu'exactement une ellipse non dégénérée peut être construite avec les valeurs d'entrée données.
Règles
L'entrée est des 10
entiers sous n'importe quelle forme appropriée, correspondant aux coordonnées x
et y
des points. Par exemple, vous pouvez prendre l'entrée comme une liste d' 10
entiers [x1, y1, x2, y2, ..., x5, y5]
, ou comme [[x1, y1], [x2, y2], ..., [x5, y5]]
, etc. Vous pouvez également gérer des nombres décimaux, mais seuls des entiers sont requis.
La sortie est une représentation de la zone de l'ellipse. Il peut s'agir d'une expression symbolique ou d'une valeur décimale avec au moins des 8
chiffres de précision.
Il s'agit de code-golf, donc la réponse la plus courte en octets l'emporte.
Exemple d'entrée et de sortie
Contribution:
[-2, 3, 2, 5, 5, 3, 4, 0, 1, -3]
Production:
62.15326783788685
Une représentation de l'ellipse passant par ces points:
Plus d'exemples:
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
Réponses:
Mathematica,
878078 octetsPrend 5 entrées:
[{x1, y1}, ... , {x5, y5}]
.Renvoie une valeur exacte / symbolique.
Comment?
Soit
f(x, y)
le vecteur(1, x, y, xy, x^2, y^2)
pour certainsx, y
.Ensuite, le déterminant de la matrice avec des vecteurs de ligne
[f(x, y), f(x1, y1), f(x2, y2), ..., f(x5, y5)]
est nul ssi(x, y)
un point de l'ellipse que nous recherchons. c'est-à-dire que le déterminant donne l'expression de l'ellipse.Puisque le signe de l'expression peut être inversé, nous prenons le terme constant et multiplions l'expression entière par le signe de la constante. De cette façon, nous pouvons définir l'expression supérieure à 0 pour trouver la zone.
la source
Sign
.MATLAB ,
130 124114 octetsL'entrée est prise comme deux vecteurs de colonne, un pour les coordonnées x et un pour les coordonnées y. Cette méthode utilise une régression des moindres séquences, qui fournit l'ellipse exacte si tous les points se trouvent exactement sur une ellipse, puis applique la formule fournie ici (merci @orlp) pour calculer la zone.
En ajoutant les lignes suivantes, vous pouvez même tracer la courbe:
Essayez-le en ligne!
la source
Mathematica 84 octets
J'ai trouvé que c'était un problème intéressant. Chaque ellipse est une transformation affine du cercle unitaire qui peut être paramétrée comme {x, y} = {Cos (t), Sin (t)}, de sorte que les points sur le cercle peuvent être mappés à l'ellipse par {xE, yE } = A {x, y} + B où A est une matrice constante et B un vecteur. Brancher les points donne 10 équations scalaires et 11 inconnues scalaires, mais nous pouvons décider que le paramétrage commence à t = 0, donc le système est résoluble. La valeur absolue du déterminant de la matrice A est le rapport de l'aire de l'ellipse au cercle unité, donc nous multiplions par Pi. Prendre Max se débarrasse de la solution négative.
Usage:
Rendements:
la source
Mathematica, 144 octets
fonctionne pour tous les cas de test
Exemple d'entrée :
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
Résultats
-10 octets de JungHwan Min
± est de 1 octet dans le codage Windows par défaut [CP-1252]
la source
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
?(3575880 π)/(2351 Sqrt[2351])
ce qui est accepté comme réponseClearAll
ne le résout pas. Oh bien, ne t'en fais pas haha. Tant que cela fonctionne pour vous. Quelle version de Mathematica utilisez-vous?Desmos , 101 octets
Desmos en ligne n'aime pas les pâtes multilignes, vous devez donc les saisir sur une seule ligne à la fois, ou
Essayez-le en ligne!
L'entrée est prise avec les deux listes
u
etv
. La sortie est affichée sur la dernière ligne.Explication:
La troisième ligne définit l'équation pour toute ellipse, avec les rayons
a
etb
, l'angle de rotationc
et le décalage(h,k)
.La quatrième ligne calcule une régression de
f
sur les listesu
etv
, en trouvant les rayonsm
etn
, l'angle de rotationo
et le décalage(p,q)
.A = pi*r1*r2
Vous pouvez également l' essayer en ligne (lien différent) pour une version visuelle interactive légèrement développée. Vous pouvez vous déplacer autour des cinq points et visualiser l'ellipse et la zone en temps réel:
Alternativement, voici une solution légèrement plus longue en utilisant cette formule (identique à la réponse de @ flawr ):
Desmos, 106 octets
Essayez-le en ligne!
la source
pi
sur la dernière ligne: si je tapemnpi
, le symbole pi apparaît toujours. De plus, voulez-vous dire "la sortie est affichée sur la dernière ligne", pas entrée?mnpi
, même s'il dit quand je le tape. Et oui, je voulais dire sortie, pas entrée, merci.