Introducción
Dados cinco puntos en el plano, su tarea es calcular el área de la elipse que pasa por estos puntos.
Puede suponer que se puede construir exactamente una elipse no degenerada con los valores de entrada dados.
Reglas
La entrada es 10
enteros en cualquier forma conveniente, correspondiente a las coordenadas x
y y
de los puntos. Por ejemplo, puede tomar la entrada como una lista de 10
enteros [x1, y1, x2, y2, ..., x5, y5]
, o como [[x1, y1], [x2, y2], ..., [x5, y5]]
, etc. También puede manejar números decimales, pero solo se requieren enteros.
La salida es una representación del área de la elipse. Esto puede ser alguna expresión simbólica o un valor decimal con al menos 8
dígitos de precisión.
Este es el código de golf, por lo que gana la respuesta más corta en bytes.
Ejemplo de entrada y salida
Entrada:
[-2, 3, 2, 5, 5, 3, 4, 0, 1, -3]
Salida:
62.15326783788685
Una representación de la elipse que pasa por estos puntos:
Más ejemplos:
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
Respuestas:
Mathematica,
878078 bytesToma 5 entradas:
[{x1, y1}, ... , {x5, y5}]
.Devuelve un valor exacto / simbólico.
¿Cómo?
Deje
f(x, y)
denotar el vector(1, x, y, xy, x^2, y^2)
para algunosx, y
.Entonces, el determinante de la matriz con los vectores de fila
[f(x, y), f(x1, y1), f(x2, y2), ..., f(x5, y5)]
es cero si f(x, y)
es un punto en la elipse que estamos buscando. es decir, el determinante da la expresión para la elipse.Como el signo de la expresión puede invertirse, tomamos el término constante y multiplicamos la expresión completa por el signo de la constante. De esa manera, podemos establecer la expresión mayor que 0 para encontrar el área.
fuente
Sign
.MATLAB ,
130124114bytesLa entrada se toma como dos vectores de columna, uno para las coordenadas xy otro para las coordenadas y. Este método utiliza una regresión de mínimos cuadrados, que proporciona la elipse exacta si todos los puntos están exactamente en una elipse, y luego aplica la fórmula provista aquí (gracias @orlp) para calcular el área.
Al agregar las siguientes líneas, incluso puede trazar la curva:
Pruébalo en línea!
fuente
Mathematica 84 Bytes
Encontré que este es un problema interesante. Cada elipse es una transformación afín del círculo unitario que se puede parametrizar como {x, y} = {Cos (t), Sin (t)}, por lo que los puntos en el círculo se pueden asignar a la elipse con {xE, yE } = A {x, y} + B donde A es una matriz constante y B un vector. Al conectar los puntos se obtienen 10 ecuaciones escalares y 11 incógnitas escalares, pero podemos decidir que la parametrización comienza en t = 0, por lo que el sistema tiene solución. El valor absoluto del determinante de la matriz A es la relación del área de la elipse al círculo unitario, por lo que multiplicamos por Pi. Tomar Max elimina la solución negativa.
Uso:
Rendimientos:
fuente
Mathematica, 144 bytes
funciona para todos los casos de prueba
Ejemplo de entrada :
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
Resultados
-10 bytes de JungHwan Min
± es de 1 byte en la codificación predeterminada de Windows [CP-1252]
fuente
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
?(3575880 π)/(2351 Sqrt[2351])
que se acepta como respuestaClearAll
no lo arregla. Oh bueno, no te preocupes por eso jaja. Mientras funcione para ti. ¿En qué versión de Mathematica estás?Desmos , 101 bytes
A Desmos en línea no le gustan las pastas multilínea, por lo que debe ingresarlas en una línea a la vez, o
¡Pruébelo en línea!
La entrada se toma con las dos listas
u
yv
. La salida se muestra en la última línea.Explicación:
La tercera línea define la ecuación para cualquier elipse, con radios
a
yb
, ángulo de rotaciónc
y desplazamiento(h,k)
.La cuarta línea calcula una regresión de
f
sobre las listasu
yv
, encontrando radiosm
yn
, ángulo de rotacióno
y desplazamiento(p,q)
.A = pi*r1*r2
También puede probarlo en línea (enlace diferente) para una versión visual interactiva ligeramente expandida. Puede moverse por los cinco puntos y ver la elipse y el área en tiempo real:
Alternativamente, aquí hay una solución un poco más larga usando esta fórmula (igual que la respuesta de @ flawr ):
Desmos, 106 bytes
¡Pruébelo en línea!
fuente
pi
en la última línea: si escribomnpi
, el símbolo pi aún aparece. Además, ¿te refieres a "la salida se muestra en la última línea", no la entrada?mnpi
, a pesar de que . Y sí, quise decir salida, no entrada, gracias.