Ini adalah salah satu dari beberapa tantangan yang tersisa untuk komunitas oleh Calvin Hobbies .
Kurva yang dibuat oleh tali atau rantai gantung yang ideal adalah catenary .
Gambar oleh Bin im Garten, via Wikimedia Commons. Digunakan di bawah lisensi CC-By-SA 3.0 .
Menulis sebuah program yang akan menarik catenary, seperti gambar, pada kuadran 1 dari pesawat diberikan dua poin (x 1 , y 1 ) , (x 2 , y 2 ) , dan "panjang tali" L . L akan lebih besar dari jarak antara dua titik.
Anda juga harus menggambar sumbu di sisi kiri dan bawah gambar (400x400 px min) untuk skala. Hanya gambar kuadran dari x dan y dalam rentang 0 hingga 100. (Anda dapat mengasumsikan poin berada dalam kisaran.)
Titik, atau sesuatu yang serupa, harus digambar pada titik akhir (x 1 , y 1 ) , (x 2 , y 2 ) untuk membedakannya. Kurva seharusnya hanya digambar di ruang antara titik-titik ini.
sumber
Jawaban:
Python + NumPy + Matplotlib, 1131
Untuk memulainya, inilah upaya yang tidak menggunakan pengetahuan tentang kalkulus atau fisika selain fakta bahwa catenary meminimalkan energi rantai. Hai, algoritme saya mungkin tidak efisien, tetapi setidaknya tidak diterapkan secara efisien juga!
sumber
BBC Basic, 300 karakter ASCII, berukuran 260 file
Emulator di http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Ini jelas telah dipecahkan sebelumnya, jadi hal pertama yang saya lakukan adalah melihat apa yang telah dilakukan orang lain.
Persamaan catenary yang berpusat pada asal adalah sederhana
y=a*cosh(x/a)
. Menjadi sedikit lebih rumit jika tidak berpusat pada titik asal.Berbagai sumber mengatakan bahwa jika panjang dan titik akhir diketahui nilai untuk
a
harus ditentukan secara numerik. Ada parameter yang tidak ditentukanh
dalam artikel wikipedia. Jadi saya menemukan situs lain dan pada dasarnya mengikuti metode di sini: http://www.math.niu.edu/~rusin/known-math/99_incoming/catenaryBBC Basic tidak memiliki
sinh
dancosh
bawaan, jadi saya mendefinisikan dua fungsi di akhir program untuk menghitung penggunaannyaEXP
koordinat untuk titik kiri harus disediakan sebelum titik kanan, OP mengonfirmasi ini OK. Panjang diberikan terakhir. Nilai dapat dipisahkan dengan koma atau baris baru.
Kode tidak dikunci
sumber
Python 2.7 + matplotlib, 424
Jalankan sebagai
Jika saya dapat berasumsi bahwa x0 selalu lebih kecil dari jumlah karakter x1 dikurangi menjadi 398
Angka ajaib 600 yang Anda lihat muncul di beberapa tempat disebabkan oleh fakta bahwa cosh (x) dan sinh (x) mulai meluap di sekitar x = 710 (jadi 600 untuk menjaga margin)
sumber