Kadang-kadang itu benar-benar merupakan perjuangan untuk mengubah koordinat Cartesian (x,y)
ke koordinat Polar (r,phi)
. Meskipun Anda dapat menghitung r = sqrt(x^2+y^2)
dengan cukup mudah, Anda sering memerlukan beberapa pembedaan kasus ketika menghitung sudut phi
karena arcsin
, arccos
dan arctan
dan semua fungsi trigonometri lainnya memiliki domain bersama yang masing-masing hanya menjangkau setengah lingkaran.
Dalam banyak bahasa ada built-in untuk mengkonversi koordinat persegi panjang ke kutub, atau setidaknya memiliki atan2
fungsi, yang - diberikan (x,y)
- menghitung sudut phi
.
Tugas
Tugas Anda adalah menulis sebuah program / fungsi yang membutuhkan dua (titik mengambang, bukan nol) koordinat Cartesian (x,y)
, dan menampilkan sudut kutub yang sesuai phi
, di mana phi
harus dalam derajat, radian atau nilai (dengan nilai yang saya maksudkan lulusan yang 1 / 400 dari lingkaran penuh), mana yang lebih nyaman bagi Anda.
Sudut diukur dalam orientasi positif, dan kami memiliki sudut nol untuk (1,0)
.
Detail
Anda tidak dapat menggunakan built-in yang menghitung sudut phi
diberikan dua koordinat, termasuk atan2
, rect2polar
, argOfComplexNumber
dan fungsi yang sama. Namun Anda dapat menggunakan fungsi trigonometri biasa dan pengembaliannya, yang hanya membutuhkan satu argumen. Setiap simbol unit adalah opsional.
Jari-jari r
harus non-negatif, dan phi
harus dalam kisaran [-360°, 360°]
(tidak masalah apakah Anda output 270°
atau -90°
).
Contohnya
Input Output
(1,1) 45°
(0,3) 90°
(-1,1) 135°
(-5,0) 180°
(-2,-2) 225°
(0,-1.5) 270°
(4,-5) 308.66°
sumber
Jawaban:
MATL , 12 byte
Hasilnya dalam radian.
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
MATL tidak memiliki
atan
fungsi (sudahatan2
, tetapi tidak dapat digunakan untuk tantangan ini). Jadi saya terpaksaacos
.sumber
0<?_
, memotong beberapa byte|
). Tapi di sini saya mengubah tanda hasil berdasarkan tanda masukan kedua ,y
. Selain itu,y
bisa jadi0
, saya tidak bisa mengalikannya dengany/abs(y))
JavaScript (ES6),
5040 byteHasilnya dalam radian. Sunting: Disimpan 10 byte ketika saya perhatikan bahwa hasilnya diperbolehkan antara -90 ° dan 270 °. Versi sebelumnya dengan
-Math.PI<=result<Math.PI
:sumber
||0
?x=y=0
kasus ini.MATLAB / Oktaf, 24 byte
Ini mendefinisikan fungsi anonim yang menghasilkan hasil dalam radian.
Cobalah di ideone .
sumber
Javascript ES6, 54 byte
Menggunakan radian
sumber
Jelly , 11 byte (tidak bersaing)
Output dalam radian. Sayangnya, Jelly memiliki bug tanda di atom divisinya, membuat jawaban ini tidak bersaing karena perbaikan bug yang diperlukan.
Cobalah online! atau verifikasi semua kasus uji (dikonversi ke derajat).
Bagaimana itu bekerja
sumber
-1÷0
memberiinf
bukannya-inf
), jadi itu tidak mungkin mempengaruhi sebagian besar tantangan.Python 3,
7567 byte8 byte berkat Dennis.
Ide itu!
sumber
and
danor
?and
danor
.pi*(x<0==y)or atan(y/(hypot(x,y)+x))*2
menghemat beberapa byte.&
adalah operator bitwise.APL (Dyalog Unicode) ,
1210 byte SBCS-2 Terima kasih kepada ngn.
Fungsi infiks diam-diam anonim. Menggunakan formula alephalpha . Dibawa
x
sebagai argumen kanan dany
sebagai argumen kiri. Hasilnya adalah dalam radian.Cobalah online!
,
menyatukany
danx
0J1⊥
Evaluasilah sebagai basis i digit (yaitu y i ¹ + x i ⁰)⍟
logaritma alami itu∘
kemudian11○
bagian imajiner dari itusumber
11○∘⍟
->12○
argOfComplexNumber
Mathematica, 16 byte
Saya tidak yakin apakah
Log
dianggap sebagai built-in yang menghitung sudut yang diberikan dua koordinat.Contoh:
sumber
bahasa mesin x86 (Linux 32 bit),
2513 byte (tidak bersaing)Untuk mencobanya secara online , kompilasi program C berikut (jangan lupa
-m32
beri tanda pada x86_64)sumber
J , 10 byte
Fungsi infiks diam-diam anonim. Menggunakan formula alephalpha . Dibawa
x
sebagai argumen kiri dany
sebagai argumen kanan. Hasilnya adalah dalam radian.Cobalah online!
j.
menghitungx
+y
× i@
kemudian^.
logaritma alami itu11 o.
bagian imajiner dari itusumber
Pyth, 26 byte
theta
dalam radian.Suite uji.
sumber
𝔼𝕊𝕄𝕚𝕟, 13 karakter / 17 byte
Try it here (ES6 browsers only).
Penggunaan
(x<0)*pi+tan(y/x)
.sumber
Python 3, 65 byte
Ini menghasilkan radian dalam kisaran
[-π/2, 3π/2)
, setara dengan[-90, 270)
derajat.sumber
Aksioma, 58 byte
tes (saya hanya menggunakan acos () mengembalikan radiasi)
sumber
Python 2 , 59 byte
Cobalah online!
Output dalam radian dalam jangkauan
[-pi,pi)
sumber