Kami tidak memiliki tantangan tunggal tentang menggambar kubus 3 dimensi yang nyata, jadi begini:
Tantangan
Tugas Anda adalah menggambar kubus yang diputar dengan perspektif. Itu bisa di jendela terpisah atau sebagai gambar.
Memasukkan
Input Anda adalah 3 angka terpisah antara 0 dan 359,99 ... Ini mewakili rotasi di sekitar sumbu x, y dan z dalam derajat.
0 0 0
30 0 40
95 320 12
Keluaran
Anda dapat menampilkannya di jendela terpisah atau menyimpan gambar. Anda dapat menggunakan semua jenis tampilan (berbasis vektor, raster, dll.).
Sunting: ASCII juga diizinkan, untuk memungkinkan bahasa golf dengan hanya keluaran tekstual.
Output untuk grafik rasterisasi atau ASCII harus setidaknya 50 * 50 (piksel untuk rasterisasi, karakter untuk ASCII)
Informasi tambahan
Sumbu z positif menunjuk keluar dari jendela, sumbu x adalah horisontal, dan sumbu y adalah vertikal. Pada dasarnya standar OpenGL.
Rotasi berlawanan arah jarum jam jika Anda melihat kubus ke arah negatif dari sumbu tertentu, misalnya melihat ke bawah untuk sumbu y.
Kamera harus berada pada sumbu z pada jarak yang wajar dari kubus pada arah z negatif, kubus harus pada (0; 0; 0). Itu. kubus juga harus sepenuhnya terlihat, dan mengambil setidaknya 50% dari bingkai gambar. Kamera harus melihat ke arah z positif pada kubus.
Rotasi kubus diterapkan dalam urutan x-> y-> z.
Kubus diputar di sekitar pusatnya, tidak bergerak.
Untuk memproyeksikan kubus dalam ruang 2d, Anda perlu membagi koordinat x dan y kubus dengan jarak yang sejajar dengan sumbu z antara titik dan kamera.
Aturan
Pustaka rendering diperbolehkan, tetapi simpul harus didefinisikan dalam kode. Tidak ada kelas model kubus 3d.
Uji kasus
sumber
google will tell you the formula.
Tidak , tantangan harus mengandung sebanyak mungkin bahan dan informasi yang diperlukan untuk menyelesaikannya, termasuk dalam badan pos . Saya seharusnya tidak harus googling atau Wikipedia-ing hanya untuk mulai memahami.Jawaban:
Sepatu (Ruby)
235231Semuanya dihitung dari awal.
Panggil dari commandline misalnya
shoes cube3d.rb 0 30 0
Idenya adalah untuk secara bersamaan menghasilkan / memutar empat simpul tetrahedron di 3d. Kemudian, karena ini direduksi menjadi 2d, kami menghasilkan empat simpul dari tetrahedron terbalik (total 8 simpul adalah dari kubus.) Ini memberikan 4 pasang simpul yang sesuai dengan 4 diagonal tubuh. Akhirnya simpul 2d dihubungkan oleh garis: setiap simpul dari tetrahedron asli harus dihubungkan ke setiap simpul dari tetrahedron terbalik yang membentuk 12 tepi dan 4 diagonal tubuh kubus. Pemesanan memastikan diagonal tubuh tidak diplot.
Output kasus uji
Perhatikan bahwa, agar konsisten dengan dua kasus uji terakhir, rotasi tentang sumbu z searah jarum jam dari POV viewer. Namun ini tampaknya bertentangan dengan spek. Arah rotasi dapat dibalik dengan memodifikasi
*i**c
->/i**c
ungolfed
Perhatikan bahwa untuk alasan historis, faktor skala 90 diterapkan pada baris 9 (dipilih sama dengan 90 derajat pada baris 2 untuk bermain golf), tetapi pada akhirnya tidak ada keuntungan bermain golf dalam menggunakan nilai khusus ini, sehingga telah menjadi pilihan sewenang-wenang.
sumber
HTML / CSS / JS, 739 byte, mungkin tidak bersaing
Tapi saya hanya ingin memamerkan transformasi CSS 3D.
Tampilkan cuplikan kode
sumber
Maple,
130 + 14(sedang berlangsung)Ini memplot fungsi konstan di dalam kotak, kemudian menggunakan opsi plot untuk menyembunyikan kutu, label, dan fungsi itu sendiri. Menambahkan
projection=.5
ke opsi membawa kamera lebih dekat, memungkinkan tampilan perspektif.Saya menulis ini sebelum spesifikasi diselesaikan dan urutan rotasi
x, y', z''
bukanx, y, z
. Sampai saya memperbaiki sudut, berikut adalah solusi lainPOV-Ray, 182
membaca input melalui
a.txt
file yang seharusnya berisi#declare R=<xx,yy,zz>;
dengan
xx,yy,zz
sudut rotasisumber