Anda mencoba memasukkan bola ke dalam kotak 5 sisi, tetapi terkadang bola itu tidak sepenuhnya cocok. Tulis fungsi untuk menghitung seberapa banyak bola di luar (di atas tepi) kotak.
Ada 3 kemungkinan situasi:
- Bola itu benar-benar pas di dalam kotak. Jawabannya adalah 0.
- Bola itu berada di tepi kotak. Jawabannya akan lebih dari setengah dari total volume.
- Bola itu terletak di bagian bawah kotak.
Anda dapat melihat setiap situasi di sini:
Anda harus menulis sebuah program atau fungsi untuk menghitung nilai ini setidaknya untuk 4 digit signifikan.
Input: 4 bilangan real non-negatif dalam format apa pun yang nyaman * - lebar, panjang, kedalaman kotak (pengukuran interior), dan diameter bola.
Output: 1 bilangan real non-negatif dalam format yang dapat digunakan * - volume total (bukan persentase) bola di luar kotak.
* harus dapat dikonversi ke / dari string desimal
Anda dianjurkan untuk membatasi penggunaan trigonometri sebanyak mungkin.
Ini adalah kontes popularitas, jadi pikirkan di luar kotak!
sumber
Jawaban:
Keempat
Silakan temukan, di bawah ini, sebuah bola di luar kotak.
"Bola" adalah fungsi komputasi volume
f
. Kotak uji referensi menyusun "kotak".Keluaran:
sumber
Berbasis Java - integer
Program ini tidak menggunakan pi dan tidak memanggil fungsi eksternal apa pun - bahkan bukan sqrt. Hanya menggunakan aritmatika sederhana -
+
,-
,*
dan/
. Selain itu, selain langkah penskalaan, ini bekerja secara eksklusif dengan bilangan bulat. Ini pada dasarnya membagi bola menjadi kubus kecil dan menghitung yang ada di luar kotak.Keluaran:
Dalam bentuk ini, program ini membutuhkan lebih dari 2GB memori (berfungsi dengan di
-Xmx2300m
sini) dan cukup lambat. Ia menggunakan memori untuk menghitung ulang sekelompok akar kuadrat (secara hitung); itu tidak benar-benar diperlukan, tetapi tanpa itu akan menjadi BANYAK lebih lambat. Untuk meningkatkan kebutuhan dan kecepatan memori, kurangi nilaiMIN
konstanta (yang akan mengurangi keakuratannya).sumber
Python 2 (pendekatan berbasis array)
Ini menciptakan array array dengan nilai kebenaran jika kotak tertentu di dalam kisi itu berada di dalam lingkaran atau di luar lingkaran. Seharusnya semakin tepat lingkaran yang Anda gambar. Itu kemudian memilih salah satu area di bawah atau di atas baris tertentu dan menghitung jumlah kotak yang menjadi milik lingkaran dan membaginya dengan jumlah kotak yang ada di seluruh lingkaran.
sumber
Python 2.7, Formula Topi Bulat
Versi ini akan memberikan peringatan runtime dalam beberapa kasus, tetapi tetap menampilkan jawaban yang benar.
Untuk 11 karakter lebih, saya bisa menghilangkan peringatan.
Berikut adalah kasus uji yang dijalankan pada versi 1:
sumber
import numpy as n
untukfrom numpy import*
dan mengambil semuan.
dalam kode Anda.Mathematica
Menggunakan integrasi numerik dengan batas yang tepat.
sumber
Implementasi Referensi - C #
Keluaran:
sumber
Rubi
Mari kita lihat ...
Jika kotak itu sepenuhnya di dalam, maka lebarnya> diameter; panjang> diameter dan tinggi> diameter.
Itu harus menjadi cek pertama yang harus dijalankan.
Jika duduk di bawah, maka w> d; l> d dan h
V=(pi*h^2 /3)*(3r-h)
Jadi dalam hal ini, Kami hanya mendapatkan ketinggian dan menjalankannya melalui itu.Jika macet, kami menggunakan rumus yang sama (
V=(pi*h/6)*(3a^2 + h^2)
). Sebenarnya formula kami sebelumnya didasarkan pada formula ini! Pada dasarnya, kita menggunakannya, dan a hanyalah yang lebih kecil dari w dan l. (Petunjuk, kita bisa mendapatkan tinggi badan dengan melakukanh=r-a
)Sekarang kodenya!
Catatan ** Saya tidak mengujinya terlalu banyak, jadi kesalahan mungkin telah merayap masuk, jika ada yang memperhatikan, beri tahu!
Matematika itu solid.
Versi lebih pendek:
(Sekarang saya tahu pasti bahwa mendapatkan h untuk v2 dilakukan secara berbeda, tetapi saya akan memperbaikinya nanti.
sumber
h=r-a
" Saya baru saja membaca pada rumus topi bulat , dan diagram tidak menyarankan hubungan yang begitu sederhana. Saya akan membacanya lagi.a = wi > le ? le : wi
harus bekerja. Jika tidak, Anda memiliki bug.a = wi>le?le:wi
tidak bekerja. Saya menduga itu karena saya menjalankan git ruby (2.2 developer), mungkin dikatakan ketidakseimbangan.c ++
Kode saya menemukan volume padatan rotasi grafik sebagian setengah lingkaran.
pdbd
memegang jarak linier proyeksi titik pada permukaan bola yang menyentuh bibir kotak dengan diameter bola yang, jika diperpanjang, akan normal ke bagian bawah kotak. Dua ekspresi yang mengandungM_PI
pada dasarnya adalah anti-turunan dari integralpi * -(x^2)+2rx
sehubungan dengan x (di mana x adalah ukuran panjang sepanjang diameter yang disebutkan di atas melalui bola dan di mana r adalah jari-jari bola) dievaluasi pada salah satupdbd
atau perbedaan diameter bola dan kedalaman kotak tergantung pada kasus khusus yang terjadi dengan dimensi yang berbeda.sumber