pengantar
Diberi lima poin di pesawat, tugas Anda adalah menghitung luas elips yang melewati titik-titik ini.
Anda dapat mengasumsikan bahwa satu elips non-degenerasi dapat dibangun dengan nilai input yang diberikan.
Aturan
Input adalah 10
bilangan bulat dalam bentuk apa pun, yang sesuai dengan x
dan y
titik koordinat. Misalnya, Anda dapat mengambil input sebagai daftar 10
bilangan bulat [x1, y1, x2, y2, ..., x5, y5]
, atau sebagai [[x1, y1], [x2, y2], ..., [x5, y5]]
, dll. Anda juga dapat menangani angka desimal, tetapi hanya bilangan bulat yang diperlukan.
Output adalah representasi dari area elips. Ini mungkin beberapa ekspresi simbolis, atau nilai desimal dengan setidaknya 8
digit presisi.
Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang.
Contoh Input dan Output
Memasukkan:
[-2, 3, 2, 5, 5, 3, 4, 0, 1, -3]
Keluaran:
62.15326783788685
Penggambaran elips yang melewati titik-titik ini:
Lebih banyak contoh:
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
Jawaban:
Mathematica,
878078 byteMembutuhkan waktu 5 input:
[{x1, y1}, ... , {x5, y5}]
.Mengembalikan nilai simbolik yang tepat.
Bagaimana?
Biarkan
f(x, y)
menunjukkan vektor(1, x, y, xy, x^2, y^2)
untuk beberapax, y
.Kemudian, penentu matriks dengan vektor baris
[f(x, y), f(x1, y1), f(x2, y2), ..., f(x5, y5)]
adalah nol iff(x, y)
adalah titik pada elips yang kita cari. yaitu determinan memberikan ekspresi untuk elips.Karena tanda ekspresi mungkin terbalik, kita mengambil istilah konstan dan mengalikan seluruh ekspresi dengan tanda konstanta. Dengan begitu, kita dapat mengatur ekspresi lebih besar dari 0 untuk menemukan area.
sumber
Sign
.MATLAB ,
130 124114 byteInput diambil sebagai dua vektor kolom, satu untuk x- dan satu untuk koordinat y. Metode ini menggunakan regresi sekuens terkecil, yang memberikan elips tepat jika semua poin tepat pada elips, dan kemudian menerapkan rumus yang disediakan di sini (terima kasih @ orlp) untuk menghitung area.
Dengan menambahkan baris berikut, Anda bahkan dapat memplot kurva:
Cobalah online!
sumber
Mathematica 84 Bytes
Saya menemukan ini menjadi masalah yang menarik. Setiap elips adalah transformasi affine dari lingkaran satuan yang dapat diparameterisasi sebagai {x, y} = {Cos (t), Sin (t)}, sehingga titik-titik pada lingkaran dapat dipetakan ke elips dengan {xE, yE } = A {x, y} + B di mana A adalah matriks konstan dan B a vektor. Memasukkan poin menghasilkan 10 persamaan skalar dan 11 skalar tidak diketahui, tetapi kita dapat memutuskan bahwa parameterisasi dimulai pada t = 0, sehingga sistem dapat dipecahkan. Nilai absolut dari penentu matriks A adalah rasio luas elips dengan lingkaran satuan sehingga kita kalikan dengan Pi. Mengambil Max menyingkirkan solusi negatif.
Pemakaian:
Hasil:
sumber
Mathematica, 144 byte
bekerja untuk semua kasus uji
Contoh input :
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
Hasil
-10 byte dari JungHwan Min
± adalah 1 byte di jendela default pengkodean [CP-1252]
sumber
[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]
?(3575880 π)/(2351 Sqrt[2351])
menerima yang diterima sebagai jawabanClearAll
tidak memperbaikinya. Oh well, jangan khawatir tentang itu haha. Selama itu berhasil untuk Anda. Kamu versi berapa Mathematica?Desmos , 101 byte
Desmos daring tidak suka pasta multiline, jadi Anda harus memasukkannya satu per satu, atau
Cobalah secara Online!
Input diambil dengan dua daftar
u
danv
. Output ditampilkan pada baris terakhir.Penjelasan:
Baris ketiga mendefinisikan persamaan untuk setiap elips, dengan jari-jari
a
danb
, sudut rotasic
, dan offset(h,k)
.Baris keempat menghitung regresi
f
atas daftaru
danv
, menemukan jarim
- jari dann
, sudut rotasio
, dan offset(p,q)
.A = pi*r1*r2
Anda juga dapat mencobanya secara online (tautan berbeda) untuk versi visual interaktif yang sedikit diperluas. Anda dapat bergerak di sekitar lima titik dan melihat elips dan area secara real time:
Sebagai alternatif, berikut adalah solusi yang sedikit lebih lama menggunakan rumus ini (sama dengan jawaban @ flawr ):
Desmos, 106 byte
Cobalah secara Online!
sumber
pi
pada baris terakhir: jika saya mengetikmnpi
, simbol pi masih muncul. Juga, maksud Anda " output ditampilkan pada baris terakhir", bukan input?mnpi
, meskipun kata-kata ketika saya mengetiknya. Dan ya, maksud saya output, bukan input, terima kasih.