Berechnen Sie die Fläche eines Polygons.
Inspiriert von diesem Schnürsenkel-Algorithmus-Video.
Aufgabe
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die die Fläche eines Polygons berechnet. Programm oder Funktion wird gemäß der Standarddefinition in Meta definiert.
Eingang
Sie erhalten die X- und Y-Koordinaten jedes Eckpunkts des Polygons. Sie können die Eingabe als Liste von Tupeln ( [[x1, y1], [x2, y2], etc]
), als Matrix oder als flache Liste ( [x1, y1, x2, y2, etc]
) annehmen . Es sind auch zwei Listen mit x
und y
Koordinaten erlaubt. Die Scheitelpunkte sind gegen den Uhrzeigersinn nummeriert und der erste Scheitelpunkt ist derselbe wie der letzte bereitgestellte Scheitelpunkt, wodurch das Polygon geschlossen wird.
Wenn Sie möchten, können Sie die Eingabe ohne den letzten Scheitelpunkt übernehmen (also jede Koordinate nur einmal empfangen).
Sie können davon ausgehen, dass sich die Kanten der Polygone nicht schneiden. Sie können auch davon ausgehen, dass alle Eckpunkte Ganzzahlkoordinaten haben.
Ausgabe
Die Fläche des Polygons. Alle Standardausgabemethoden sind zulässig. Wenn Ihre Sprache keine Gleitkommadivision zulässt und die Lösung keine Ganzzahl ist, können Sie einen Bruch zurückgeben. Die Fraktion muss nicht unbedingt vereinfacht werden, sodass eine Rückgabe 2/4
zulässig wäre.
Gewinnkriterium
Kürzester Code gewinnt!
Testfälle
[[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]
erlaubt?Antworten:
Gelee ,
86 Bytes-1 Byte dank Emigna (redundant
€
,ÆḊ
hat eine linke Tiefe von 2)-1 Byte dank Emigna (halbieren,
H
Fließkomma ist nicht nötig÷2
)Eine monadische Verbindung, die eine Liste von Koordinatenpaaren entgegen dem Uhrzeigersinn gemäß den Beispielen (mit der einen Wiederholung) aufnimmt und den Bereich zurückgibt.
Probieren Sie es online!
Wie?
Wendet den Schnürsenkel-Algorithmus an, genau wie im Video beschrieben (was ich auch gerade gesehen habe!)
quelle
[x,y]
Koordinaten eher im Uhrzeigersinn als gegen den Uhrzeigersinn angegeben werden. Eine Eingabe von[[1,1],[0,1],[1,0],[1,1]]
wird a zurückgeben0.5
.H
anstelle von÷2
Mathematica, 13 Bytes
quelle
Oktave , 9 Bytes
Eingaben sind ein Vektor mit den x- Werten und ein Vektor mit den y- Werten. Dies funktioniert auch in MATLAB.
Probieren Sie es online!
quelle
JavaScript (ES6),
696747 ByteVielen Dank an @Rick, dass wir den absoluten Wert nicht benötigen, wenn die Scheitelpunkte garantiert gegen den Uhrzeigersinn sortiert werden, und für den Vorschlag, eine flache Liste als Eingabe zu verwenden, um 20 Byte zu sparen!
Nimmt die Eingabe als flache Liste von Scheitelpunkten, einschließlich des letzten Scheitelpunkts.
Probieren Sie es online!
Wie?
quelle
a=>(g=([x,y,...a])=>1-a?0:x*a[1]-y*a[0]+g(a))(a)/2
R,
5452 BytesWas zur Funktion auswertet:
Verwendet die vordefinierten
F = FALSE = 0
. Implementiert den Schnürsenkel-Algorithmus im verknüpften Video :)-2 Bytes dank Giuseppe
quelle
i+-1:0
als Zeilenindex+
;)Python 3 ,
7271 BytesNimmt zwei Listen auf, wie es in den Kommentaren erlaubt war
Probieren Sie es online!
Dies ist im Grunde nur die Umsetzung der Schnürsenkel-Formel . Kann ich Pluspunkte für einen Golf bekommen, den Sie tatsächlich so umsetzen würden? : D
-1, dahinter ist kein Leerzeichen erforderlich
x,y:
.quelle
lambda x,y:
ist es in Ordnung , einfach mit zu beginnen .Mathematik , 31 Bytes
Probieren Sie es online!
Mathematica, 25 Bytes
quelle
JS (ES6),
98959493888682817773 BytesNimmt Eingaben wie
[x1, x2, x3], [y1, y2, y3]
und überspringt das wiederholte Koordinatenpaar.-3 Bytes dank @JarkoDubbeldam
-4 Bytes dank @JarkoDubbeldam
-1 Byte dank @ZacharyT
-4 Bytes dank @ZacharyT
-4 Bytes dank @Rick
quelle
J, 12 Bytes
Angenommen, die Eingabe ist eine Liste von 2 Elementlisten (dh eine Tabelle)
2[\
- Zerlegt es in die Schnürsenkel Xs, dh überlappende Quadrate von 4 Ulmen-/ .*
- die Determinante von jedem+/
- Fasse es zusammen-:
- durch 2 teilenWenn wir die Eingabe als einzelne Liste erhalten, müssen wir uns zuerst in eine Tabelle umwandeln und erhalten 20 Bytes:
quelle
MS-SQL, 66 Bytes
MS SQL 2008 und höher unterstützen Open Geospatial Consortium (OGC) -Standard-Geodaten / -Funktionen, die ich hier nutze.
Die Eingangsdaten werden in Feld gespeichert p vorbestehender Tabelle g , pro unseren Input - Standards .
Die Eingabe ist ein Textfeld mit geordneten Paaren im folgenden Format:
(4 4,0 1,-2 5,-6 0,-1 -4,5 -2,4 4)
Nun, nur zum Spaß, wenn Sie zulassen, dass meine Eingabetabelle Open Geospatial Consortium-Standardgeometrieobjekte enthält (anstatt nur Textdaten), wird dies fast trivial:
quelle
Haskell , 45 Bytes
Probieren Sie es online!
quelle
Perl 5
-pa
, 62 BytesProbieren Sie es online!
Übernimmt die Eingabe als Liste von X-Koordinaten in der ersten Zeile, gefolgt von einer Liste von Y-Koordinaten in der zweiten Zeile.
quelle