Wprowadzenie
Biorąc pod uwagę pięć punktów w płaszczyźnie, Twoim zadaniem jest obliczenie obszaru elipsy przechodzącej przez te punkty.
Możesz założyć, że dokładnie jedna nie-zdegenerowana elipsa może być zbudowana z podanych wartości wejściowych.
Zasady
Dane wejściowe to 10
liczby całkowite w dowolnej dogodnej formie, odpowiadające x
i y
współrzędne punktów. Na przykład, możesz wziąć dane wejściowe jako listę 10
liczb całkowitych [x1, y1, x2, y2, ..., x5, y5]
lub jako [[x1, y1], [x2, y2], ..., [x5, y5]]
itd. Możesz także obsługiwać liczby dziesiętne, ale wymagane są tylko liczby całkowite.
Dane wyjściowe są reprezentacją obszaru elipsy. Może to być jakieś wyrażenie symboliczne lub wartość dziesiętna z co najmniej 8
cyframi dokładności.
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach.
Przykład wejścia i wyjścia
Wejście:
[-2, 3, 2, 5, 5, 3, 4, 0, 1, -3]
Wynik:
62,15326783788685
Przedstawienie elipsy przechodzącej przez te punkty:
Więcej przykładów:
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
Odpowiedzi:
Mathematica,
878078 bajtówTrwa 5 wejść:
[{x1, y1}, ... , {x5, y5}]
.Zwraca dokładną / symboliczną wartość.
W jaki sposób?
Niech dla niektórych
f(x, y)
oznacza wektor .(1, x, y, xy, x^2, y^2)
x, y
Następnie wyznacznikiem macierzy z wektorami rzędowymi
[f(x, y), f(x1, y1), f(x2, y2), ..., f(x5, y5)]
jest zero, a iff(x, y)
to punkt elipsy, której szukamy. tzn. wyznacznik daje wyrażenie elipsy.Ponieważ znak wyrażenia może być odwrócony, przyjmujemy stały wyraz i mnożymy całe wyrażenie przez znak stałej. W ten sposób możemy ustawić wyrażenie większe niż 0, aby znaleźć obszar.
źródło
Sign
.MATLAB ,
130 124114 bajtówDane wejściowe są takean jako dwa wektory kolumnowe, jeden dla współrzędnych xi jeden dla współrzędnych y. Ta metoda wykorzystuje regresję co najmniej sekwensów, która zapewnia dokładną elipsę, jeśli wszystkie punkty znajdują się dokładnie na elipsie, a następnie stosuje wzór podany tutaj (dzięki @orlp), aby obliczyć obszar.
Dołączając następujące linie, możesz nawet wykreślić krzywą:
Wypróbuj online!
źródło
Mathematica 84 bajtów
Uważam to za interesujący problem. Każda elipsa jest afiniczną transformacją koła jednostkowego, którą można sparametryzować jako {x, y} = {Cos (t), Sin (t)}, więc punkty na okręgu można odwzorować na elipsę za pomocą {xE, yE } = A {x, y} + B, gdzie A jest stałą macierzą, a B jest wektorem. Podłączenie punktów daje 10 równań skalarnych i 11 niewiadomych skalarnych, ale możemy zdecydować, że parametryzacja rozpoczyna się od t = 0, więc układ jest rozwiązywalny. Wartość bezwzględna wyznacznika macierzy A jest stosunkiem pola elipsy do koła jednostkowego, więc mnożymy przez Pi. Biorąc Max pozbywa się negatywnego rozwiązania.
Stosowanie:
Wydajność:
źródło
Mathematica, 144 bajty
działa dla wszystkich przypadków testowych
Przykład wprowadzania :
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
Wyniki
-10 bajtów od JungHwan Min
± to 1 bajt w domyślnym kodowaniu okien [CP-1252]
źródło
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
?(3575880 π)/(2351 Sqrt[2351])
co jest akceptowane jako odpowiedźClearAll
tego nie naprawia. No cóż, nie martw się haha. Tak długo, jak to działa dla ciebie. W jakiej wersji Mathematica korzystasz?Desmos , 101 bajtów
Online Desmos nie lubi past wielowierszowych, więc musisz wprowadzić go w jednym wierszu na raz lub
Wypróbuj online!
Dane wejściowe są pobierane z dwóch list
u
iv
. Dane wyjściowe są wyświetlane w ostatnim wierszu.Wyjaśnienie:
Trzecia linia określa równanie dla dowolnej elipsy, z promieniami
a
ib
kątem obrotuc
oraz przesunięciem(h,k)
.Czwarta linia oblicza regresję
f
ponad listamiu
orazv
znajdowanie promienim
in
kąta obrotuo
oraz przesunięcia(p,q)
.A = pi*r1*r2
Możesz także wypróbować online (inny link), aby uzyskać nieco rozszerzoną, interaktywną wersję wizualną. Możesz poruszać się po pięciu punktach i wyświetlać elipsę i obszar w czasie rzeczywistym:
Alternatywnie, oto nieco dłuższe rozwiązanie przy użyciu tej formuły (to samo co odpowiedź @ flawr ):
Desmos, 106 bajtów
Wypróbuj online!
źródło
pi
w ostatnim wierszu: jeśli wpiszeszmnpi
, symbol pi nadal się wyświetla. Czy masz również na myśli „ wynik jest wyświetlany w ostatnim wierszu”, a nie wejście?mnpi
, nawet jeśli wypowiada słowa. I tak, miałem na myśli dane wyjściowe, a nie wejściowe, dzięki.