Tugasnya adalah menggambar poligon beraturan dengan hanya menggunakan kompas dan penggaris yang tidak bertanda.
Input (n) adalah salah satu dari 10 angka berikut: 3, 4, 5, 6, 8, 10, 12, 15, 16, 17.
Metode : Karena Anda hanya memiliki penggaris dan kompas, Anda hanya dapat menggambar titik, garis, dan lingkaran.
Garis hanya dapat ditarik:
- melalui dua poin yang ada.
Lingkaran hanya bisa digambar:
- dengan satu titik sebagai pusatnya dan dengan perimeternya melewati titik kedua.
Poin hanya dapat ditarik:
di persimpangan dua garis,
di persimpangan garis dan lingkaran,
di persimpangan dua lingkaran,
di awal, ketika Anda dapat menggambar 2 poin untuk memulai.
Melalui proses ini (dan hanya melalui proses ini) Anda harus menggambar garis n dari n-gon yang diminta, bersama dengan pekerjaan apa pun yang diperlukan untuk sampai ke tahap itu.
EDIT: Posisi persimpangan harus dihitung, tetapi garis dan lingkaran dapat ditarik dengan cara apa pun yang disediakan oleh bahasa.
Output adalah gambar dari poligon reguler n-sided, menunjukkan kerja.
Secara grafis tidak ada batasan pada ukuran gambar, format, ketebalan garis atau apa pun yang tidak disebutkan di sini. Namun harus dimungkinkan untuk secara visual membedakan garis, lingkaran, dan persimpangan yang berbeda. Selain itu:
- Garis n yang membentuk sisi n-gon Anda harus memiliki warna yang berbeda dengan 'kerja' Anda (yaitu titik, lingkaran, atau garis lain) dan warna yang berbeda lagi untuk latar belakang Anda.
- Bekerja dapat meninggalkan batas area gambar, kecuali titik, yang semuanya harus berada dalam batas gambar yang terlihat.
- Lingkaran bisa berupa lingkaran penuh atau hanya busur (selama itu menunjukkan persimpangan yang diperlukan).
Sebuah garis tidak terbatas (yaitu meninggalkan area gambar) atau memotong pada dua titik yang dilaluinya.EDIT: Sebuah garis dapat ditarik panjangnya. Poin hanya dapat dibuat jika garis yang ditarik secara visual memotong.- Suatu titik dapat ditarik sesuai keinginan, termasuk tidak menandainya.
Skor dua kali lipat, kiriman mendapat 1 poin per input yang didukungnya, untuk maksimum 10 poin. Dalam hal undian, jumlah byte terpendek menang.
Pengakuan akan diberikan pada kiriman yang dapat membuat n-gon dalam langkah paling sedikit atau mampu membuat n-gon di luar rentang yang diberikan, tetapi itu tidak akan membantu skor Anda.
CIRCLE 0,0,500
atau harus saya lakukanR=SQRT(300^2+400^2): CIRCLE 0,0,R
? (BTW mengerjakan posisi persimpangan mungkin lebih sulit daripada garis dan lingkaran.)Carl Friedrich Gauss in 1796 showed that a regular n-sided polygon can be constructed with straightedge and compass if the odd prime factors of n are distinct Fermat primes
Jawaban:
BBC Basic, 8 poligon: 3,4,5,6,8,10,12,15 sisi (juga 60 sisi)
Unduh emulator di http://www.bbcbasic.co.uk/bbcwin/download.html
Saya memutuskan untuk tidak memasukkan 16 sisi, hanya karena pra-konstruksi saya semakin berantakan. 2 lingkaran lagi dan satu garis akan dibutuhkan. Sisi BTW 17 memang sangat rumit, dan mungkin akan lebih baik sebagai program terpisah.
Saya mendapat lebih banyak pengembalian karena menambahkan 2 lingkaran pada konstruksi asli saya untuk membuat pentagon, karena ini juga memberi saya akses ke 10,15 dan 60 sisi.
Program ini melakukan pra-konstruksi sebelum meminta input pengguna. Ini cukup untuk mendefinisikan setidaknya 2 titik pada lingkaran utama yang sesuai dengan simpul yang berdekatan dari angka 3,4,5,6,8,10,12,15 atau 60 sisi. Poin disimpan dalam satu set array elemen 99, di mana elemen 0-59 disisihkan untuk titik yang berjarak sama di sekitar keliling. Ini terutama untuk kejelasan, segi delapan tidak pas dengan 60 poin sehingga beberapa fleksibilitas diperlukan di sana (dan juga untuk 16-gon jika disertakan.) Gambar terlihat seperti gambar di bawah ini, putih dan abu-abu, dengan hanya dua lingkaran berwarna kuning secara eksklusif didedikasikan untuk bentuk dengan kelipatan 5 sisi. Lihat http://en.wikipedia.org/wiki/Pentagon#mediaviewer/File:Regular_Pentagon_Inscribed_in_a_Circle_240px.gifuntuk metode menggambar pentagon pilihan saya. Sudut jaunty adalah untuk menghindari garis vertikal, karena program tidak dapat menangani gradien tak terbatas.
Pengguna memasukkan angka
d
untuk jumlah sisi yang diperlukan. Program mencari dalam array indeks yang pertama dari dua titik (yang berikutnya adalah 60 / d jauhnya searah jarum jam.)Program kemudian loop melalui proses menggambar lingkaran yang berpusat pada titik kedua yang melewati throug yang pertama, dan menghitung persimpangan baru untuk berjalan di lingkaran utama. Lingkaran konstruksi digambar dengan warna biru, dan poligon yang diperlukan digambar dengan warna merah. Gambar akhir terlihat seperti ini.
Saya cukup senang dengan mereka. BBC Basic melakukan perhitungan dengan cukup akurat. Namun jelas (terutama dengan sisi 15 dan 60) bahwa BBC Basic cenderung menggambar lingkaran dengan jari-jari sedikit lebih kecil dari yang seharusnya.
sumber
Mathematica,
234 poligon, 759 bytePoin-poin acak:
Switch
untuk memilih lingkaran dan garis yang relevan untuk setiap konstruksi. Dengan begitu saya bisa menggunakan kembali banyak primitif di antara mereka.Berikut adalah kode yang tidak dipisahkan:
Dan inilah outputnya:
sumber
Switch
. Itu mungkin akan memungkinkan saya untuk menggunakan kembali lebih banyak garis dan titik lingkaran.