Einführung
Bei fünf Punkten in der Ebene besteht Ihre Aufgabe darin, die Fläche der Ellipse zu berechnen, die durch diese Punkte verläuft.
Sie können davon ausgehen, dass mit den angegebenen Eingabewerten genau eine nicht entartete Ellipse erstellt werden kann.
Regeln
Die Eingabe besteht aus 10
Ganzzahlen in beliebiger Form, die den x
und y
Koordinaten der Punkte entsprechen. Sie können die Eingabe beispielsweise als Liste von 10
Ganzzahlen [x1, y1, x2, y2, ..., x5, y5]
oder als [[x1, y1], [x2, y2], ..., [x5, y5]]
usw. verwenden. Sie können auch Dezimalzahlen verarbeiten, es sind jedoch nur Ganzzahlen erforderlich.
Die Ausgabe ist eine Darstellung des Bereichs der Ellipse. Dies kann ein symbolischer Ausdruck oder ein Dezimalwert mit mindestens 8
einer Genauigkeit sein.
Dies ist Code-Golf, daher gewinnt die kürzeste Antwort in Bytes.
Beispiel für Ein- und Ausgabe
Eingang:
[-2, 3, 2, 5, 5, 3, 4, 0, 1, -3]
Ausgabe:
62.15326783788685
Eine Darstellung der Ellipse, die durch diese Punkte verläuft:
Mehr Beispiele:
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
Antworten:
Mathematica,
878078 BytesNimmt 5 Eingaben :
[{x1, y1}, ... , {x5, y5}]
.Gibt einen exakten / symbolischen Wert zurück.
Wie?
Lassen Sie
f(x, y)
bezeichnen den Vektor(1, x, y, xy, x^2, y^2)
für einigex, y
.Dann ist die Determinante der Matrix mit Zeilenvektoren
[f(x, y), f(x1, y1), f(x2, y2), ..., f(x5, y5)]
Null, wenn f(x, y)
ein Punkt auf der Ellipse ist, nach der wir suchen. dh die Determinante gibt den Ausdruck für die Ellipse an.Da das Vorzeichen des Ausdrucks möglicherweise invertiert ist, nehmen wir den konstanten Term und multiplizieren den gesamten Ausdruck mit dem Vorzeichen der Konstante. Auf diese Weise können wir den Ausdruck größer als 0 setzen, um den Bereich zu finden.
quelle
Sign
.MATLAB ,
130 124114 BytesDie Eingabe erfolgt als zwei Spaltenvektoren, einer für die x- und einer für die y-Koordinaten. Diese Methode verwendet eine Regression der kleinsten Folgen, die die genaue Ellipse liefert, wenn sich alle Punkte genau auf einer Ellipse befinden, und wendet dann die hier angegebene Formel an (danke @orlp), um die Fläche zu berechnen.
Durch Anhängen der folgenden Linien können Sie sogar die Kurve zeichnen:
Probieren Sie es online aus!
quelle
Mathematica 84 Bytes
Ich fand das ein interessantes Problem. Jede Ellipse ist eine affine Transformation des Einheitskreises, die als {x, y} = {Cos (t), Sin (t)} parametrisiert werden kann, sodass die Punkte auf dem Kreis durch {xE, yE auf die Ellipse abgebildet werden können } = A {x, y} + B wobei A eine konstante Matrix und B ein Vektor ist. Das Einfügen der Punkte ergibt 10 skalare Gleichungen und 11 skalare Unbekannte, aber wir können entscheiden, dass die Parametrisierung bei t = 0 beginnt, sodass das System lösbar ist. Der Absolutwert der Determinante der Matrix A ist das Verhältnis der Fläche der Ellipse zum Einheitskreis, also multiplizieren wir mit Pi. Durch die Einnahme von Max wird die negative Lösung beseitigt.
Verwendungszweck:
Ausbeuten:
quelle
Mathematica, 144 Bytes
funktioniert für alle Testfälle
Eingabebeispiel :
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
Ergebnisse
-10 Bytes von JungHwan min
± sind 1 Byte in der Standard-Windows-Codierung [CP-1252]
quelle
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
?(3575880 π)/(2351 Sqrt[2351])
ClearAll
repariert es sogar nicht. Na ja, mach dir keine Sorgen, haha. Solange es für dich funktioniert. Auf welcher Version von Mathematica bist du?Desmos , 101 Bytes
Online Desmos mag keine mehrzeiligen Pasten, daher müssen Sie sie jeweils in einer Zeile eingeben, oder
Probieren Sie es online aus!
Die Eingabe erfolgt mit den beiden Listen
u
undv
. Die Ausgabe wird in der letzten Zeile angezeigt.Erläuterung:
Die dritte Linie definiert die Gleichung für jede Ellipse mit Radien
a
undb
Drehwinkelc
und Versatz(h,k)
.Die vierte Zeile berechnet eine Regression von
f
über den Listenu
und ermitteltv
Radienm
undn
Drehwinkelo
und Versatz(p,q)
.A = pi*r1*r2
Sie können es auch online ausprobieren (anderer Link), um eine leicht erweiterte, interaktive visuelle Version zu erhalten. Sie können sich um die fünf Punkte bewegen und die Ellipse und den Bereich in Echtzeit anzeigen:
Alternativ ist hier eine etwas längere Lösung mit dieser Formel (wie die Antwort von @ errorr ):
Desmos, 106 Bytes
Probieren Sie es online aus!
quelle
pi
in der letzten Zeile nicht: Wenn ich tippemnpi
, wird das pi-Symbol weiterhin angezeigt. Meinen Sie auch "die Ausgabe wird in der letzten Zeile angezeigt", nicht die Eingabe?mnpi
, obwohl er beim Eingeben Wörter enthält. Und ja, ich meinte Ausgabe, nicht Eingabe, danke.