Calcular el área de un polígono.
Inspirado en este video del algoritmo de cordones.
Tarea
Su trabajo es crear un programa o función que calcule el área de un polígono. El programa o función se define según la definición predeterminada en meta.
Entrada
Recibirá las coordenadas X e Y de cada vértice del polígono. Puede tomar la entrada como una lista de tuplas ( [[x1, y1], [x2, y2], etc]
), una matriz o una lista plana ( [x1, y1, x2, y2, etc]
). También se permiten dos listas que contienen x
y y
coordenadas respectivamente. Los vértices están numerados en sentido antihorario y el primer vértice es el mismo que el último vértice proporcionado, cerrando así el polígono.
Si lo desea, puede tomar la entrada sin el último vértice (así que reciba cada coordenada solo una vez).
Puede suponer que los bordes de los polígonos no se cruzan. También puede suponer que todos los vértices tienen coordenadas enteras.
Salida
El área del polígono. Todos los métodos de salida estándar están permitidos. Si su idioma no permite la división flotante y la solución no sería un número entero, puede devolver una fracción. La fracción no necesariamente tiene que simplificarse, por 2/4
lo que se permitiría el retorno .
Criterio ganador
¡El código más corto gana!
Casos de prueba
[[4,4],[0,1],[-2,5],[-6,0],[-1,-4],[5,-2],[4,4]]
55
[[1,1],[0,1],[1,0],[1,1]]
0.5
1/2
[x1, x2, x3], [y1, y2, y3]
permite la entrada como ?Respuestas:
Jalea ,
86 bytes-1 byte gracias a Emigna (redundante
€
,ÆḊ
tiene una profundidad izquierda de 2)-1 byte gracias a Emigna, nuevamente (reducir a la mitad
H
, es punto flotante no es necesario÷2
)Un enlace monádico que toma una lista de pares de coordenadas en sentido antihorario según los ejemplos (con una repetición) y devuelve el área.
Pruébalo en línea!
¿Cómo?
Aplica el algoritmo de cordones de los zapatos, tal como se describe en el video (¡que también vi el otro día!)
fuente
[x,y]
coordenadas se dan en sentido horario en lugar de hacerlo en sentido antihorario. Una entrada de[[1,1],[0,1],[1,0],[1,1]]
devolverá a0.5
.H
lugar de÷2
Mathematica, 13 bytes
fuente
Octava , 9 bytes
Las entradas son un vector con los valores de x y un vector con los valores de y . Esto también funciona en MATLAB.
Pruébalo en línea!
fuente
JavaScript (ES6),
696747 bytesGracias a @Rick por notar que no necesitamos el valor absoluto si se garantiza que los vértices estén ordenados en sentido antihorario y por sugerir tomar una lista plana como entrada, ¡ahorrando 20 bytes!
Toma la entrada como una lista plana de vértices, incluido el último vértice.
Pruébalo en línea!
¿Cómo?
fuente
a=>(g=([x,y,...a])=>1-a?0:x*a[1]-y*a[0]+g(a))(a)/2
R,
5452 bytesLo que evalúa la función:
Hace uso de lo predefinido
F = FALSE = 0
. Implementa el algoritmo de cordones en el video vinculado :)-2 bytes gracias a Giuseppe
fuente
i+-1:0
como índice de fila+
;)Python 3 ,
7271 bytesToma dos listas, como se permitió en los comentarios
Pruébalo en línea!
Esto es básicamente solo la implementación de la fórmula del cordón . ¿Puedo obtener puntos adicionales para un golf que realmente implementaría de esa manera? :RE
-1, no hay necesidad de un espacio detrás
x,y:
.fuente
lambda x,y:
está bien.Matemáticas , 31 bytes
Pruébalo en línea!
Mathematica, 25 bytes
fuente
JS (ES6),
98959493888682817773 bytesToma como entrada
[x1, x2, x3], [y1, y2, y3]
y omite el par coordinado repetido.-3 bytes gracias a @JarkoDubbeldam
-4 bytes gracias a @JarkoDubbeldam
-1 byte gracias a @ZacharyT
-4 bytes gracias a @ZacharyT
-4 bytes gracias a @Rick
fuente
J, 12 bytes
Suponiendo que la entrada es una lista de 2 listas de elementos (es decir, una tabla)
2[\
- lo descompone en el cordón X, es decir, cuadrados superpuestos de 4 olmos-/ .*
- el determinante de cada+/
- suma-:
- dividir por 2Si obtenemos la entrada como una lista única, primero debemos transformarnos en una tabla, lo que nos da 20 bytes:
fuente
MS-SQL, 66 bytes
MS SQL 2008 y superior son compatibles con los datos / funciones espaciales estándar del Open Geospatial Consortium (OGC), que estoy aprovechando aquí.
Los datos de entrada se almacenan en el campo p de la tabla g preexistente , según nuestros estándares de entrada .
La entrada es un campo de texto con pares ordenados en el siguiente formato:
(4 4,0 1,-2 5,-6 0,-1 -4,5 -2,4 4)
Ahora, solo por diversión, si permitiste que mi tabla de entrada contenga objetos de geometría estándar del Consorcio Geoespacial Abierto (en lugar de solo datos de texto), entonces se vuelve casi trivial:
fuente
Haskell , 45 bytes
Pruébalo en línea!
fuente
Perl 5
-pa
, 62 bytesPruébalo en línea!
Toma la entrada como una lista de coordenadas X en la primera línea seguida de una lista de coordenadas Y en la segunda.
fuente