Menggambar jaring 3d - padatan Archimedean

12

Saya memiliki kelemahan untuk jaring 3d yang ketika dipotong dan dilipat memungkinkan Anda untuk membuat bentuk 3d dari kertas atau kartu. Tugasnya sederhana, menulis program terpendek yang dapat Anda ambil jaring untuk 13 padatan Archimedean. Outputnya harus berupa file gambar dalam format apa pun yang masuk akal (png, jpg).

Semua tiga belas bentuk dijelaskan di http://en.wikipedia.org/wiki/Archimedean_solid dan dalam tabel berikut diambil dari sana.

masukkan deskripsi gambar di sini

Input: Bilangan bulat dari 1 hingga 13. Asumsikan bentuk diberi nomor persis seperti pada tabel di atas sehingga "tetrahedron terpotong" adalah nomor 1 dan "snub dodecahedron" adalah angka 13.

Keluaran: File gambar berisi jaring untuk bentuk itu. Hanya garis besar termasuk garis internal adalah OK. Tidak perlu mengisinya dengan warna

Anda dapat menggunakan bahasa pemrograman apa pun yang Anda suka serta perpustakaan apa pun yang tidak dibuat khusus untuk kompetisi ini. Keduanya harus tersedia secara bebas namun (dalam kedua pengertian) online.

Saya akan menerima jawabannya dengan jumlah karakter terkecil dalam waktu tepat satu minggu. Jawaban akan diterima kapan pun mereka datang.

(Tidak) Pemenang. Sayangnya tidak ada pendaftar yang valid. Mungkin ini terlalu sulit?

felipa
sumber
Mungkin menyingkirkan batas waktu sama sekali? Bagaimana jika seseorang menemukan ini setahun dari sekarang. Apakah Anda ingin mereka tidak mencoba? ... Mungkin lebih baik melakukan Platonis dulu, tunggu, kemudian yang sulit. Anda mungkin telah membagi bunga. Bagi saya pribadi (semua ini adalah ekstrapolasi), ketika saya melihat dua yang serupa, saya agak menarik diri darinya, merasa saya tidak punya waktu untuk benar-benar melihat keduanya dan merencanakan bagaimana menyelesaikan keduanya. Dan saya tidak ingin melakukannya dengan cara lain .... Di sisi lain, orang lain di sini mengalami kesulitan dengan tantangan Bagian-2. Lihat yang Minsky Register Machine. Mungkin itu bukan kamu.
luser droog
@luserdroog Terima kasih. Pertanyaan diedit. Saya mungkin harus menambahkan bahwa saya telah mengirim email jawaban atas pertanyaan terkait di sekitar banyak orang yang menyukainya! FWIW.
felipa
Saya tidak berpikir itu sulit untuk dilakukan , tetapi untuk golf itu memerlukan beberapa jam berpikir dan bereksperimen karena ada banyak kemungkinan jaring untuk setiap polyhedron dan mereka tidak dapat mengompres dengan baik.
Peter Taylor

Jawaban:

9

Jawa, 1552

import java.awt.*;import java.awt.image.*;import java.io.*;import javax.imageio.*;class
A{public static void main(String[]x)throws
Exception{String[]a={"33623368356:356;66","33413341334535463547354735473444","33823382338:3586338>358>358>358?88","66456:466:466845684668466766","334144453546354635474746464646464647354634463446344744","88456:466:466:4668458<468<468<468:456846684668466788","33343535353231333535313133353447353434353534313133353447353545343535313133353447353545343444","33513351335233593554335433593554335935543359355433593559355835593559355935593455","33:233:233:433:B35:833:833:B35:833:B35:833:B35:833:B35:B35:833:B35:B35:B35:B35:C::","66566:576:57696869576969586969586:586969576969586857685868586766","334155453546354635463547594658465846584658473546354634463546344635463446354634463547584657465746574657473546344634463446344755","::456:466:466:466:466845:@46:@46:@46:@46:>4568466:4668466:4668466:4668466:4668466845:>46:>46:>46:>46:<45684668466846684667::","333531333434343132333434353531313335343434323232323334343435353231333133343556343434313233323335345935353532313331313132333233353535343557343133343556343434355934353535593432333234355935323335345935323335345935323335345935343459313334353455"};BufferedImage
m=new BufferedImage(1300,1300,1);Graphics2D g=m.createGraphics();g.translate(500,500);String
s=a[Integer.valueOf(x[0])-1];int f=1,i=0,n,t;while(i<s.length()){n=s.charAt(i++)-48;t=s.charAt(i++);while(t-->48){g.drawLine(0,0,20,0);g.translate(20,0);g.rotate(f*Math.PI*2/n);}f=-f;}ImageIO.write(m,"png",new File("o.png"));}}

Tidak Disatukan:

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class A {
    static int f = 1;
    static Graphics2D g;

    static void fixtrans() {
        double[] m = new double[6];
        g.getTransform().getMatrix(m);
        for (int i = 0; i < 6; ++i) {
            if (Math.abs(m[i] - Math.round(m[i])) < 1e-5) {
                m[i] = Math.round(m[i]);
            }
        }
        g.setTransform(new AffineTransform(m));
    }

    static void d(String s) {
        for (int i = 0; i < s.length();) {
            int n = s.charAt(i++) - '0';
            int t = s.charAt(i++) - '0';
            for (int j = 0; j < t; ++j) {
                g.drawLine(0, 0, 20, 0);
                g.translate(20, 0);
                g.rotate(f * Math.PI * 2 / n);
                fixtrans(); // optional, straightens some lines
            }
            f = -f;
        }
    }

    public static void main(String[] args) throws Exception {
        String[] a = {
                "33623368356:356;66",
                "33413341334535463547354735473444",
                "33823382338:3586338>358>358>358?88",
                "66456:466:466845684668466766",
                "334144453546354635474746464646464647354634463446344744",
                "88456:466:466:4668458<468<468<468:456846684668466788",
                "33343535353231333535313133353447353434353534313133353447353545343535313133353447353545343444",
                "33513351335233593554335433593554335935543359355433593559355835593559355935593455",
                "33:233:233:433:B35:833:833:B35:833:B35:833:B35:833:B35:B35:833:B35:B35:B35:B35:C::",
                "66566:576:57696869576969586969586:586969576969586857685868586766",
                "334155453546354635463547594658465846584658473546354634463546344635463446354634463547584657465746574657473546344634463446344755",
                "::456:466:466:466:466845:@46:@46:@46:@46:>4568466:4668466:4668466:4668466:4668466845:>46:>46:>46:>46:<45684668466846684667::",
// bad          "333531333434343132333434353531313335343434323232323334343435353231333133343556343434313233323335345935353532313331313132333233353535343557343133343556343434355934353531333459343434355935323335345935323335345935323335345935323335345935353455"
                "333531333434343132333434353531313335343434323232323334343435353231333133343556343434313233323335345935353532313331313132333233353535343557343133343556343434355934353535593432333234355935323335345935323335345935323335345935343459313334353455"};

        BufferedImage img = new BufferedImage(1300, 1300, BufferedImage.TYPE_INT_RGB);
        g = img.createGraphics();
        g.translate(500, 500);
        d(a[Integer.parseInt(args[0]) - 1]);
        String f = args[0] + ".png";
        ImageIO.write(img, "png", new File(f));
    }
}

Hasil (dipangkas, dinegasikan, bergabung, dan diskalakan):

hasil

Bentuknya sangat tidak biasa :) tetapi benar sejauh yang saya tahu (beri tahu saya jika Anda menemukan kesalahan). Mereka dihasilkan (dalam program terpisah) dengan membuat grafik wajah dan memotong siklus dalam DFS.

Saya yakin ini bisa golf lebih banyak menggunakan misalnya python dan kura-kura.

Sunting: oops, kasing terakhir agak bersinggungan sendiri. Saya memperbaiki kode (dengan tangan), inilah gambar yang diperbarui:

13 dikoreksi

aditsu berhenti karena SE adalah JAHAT
sumber
Apakah perbaikan dengan tangan berarti kode masih menampilkan persimpangan sendiri? Apakah itu satu-satunya hal yang memisahkan ini dari jawaban yang valid?
trichoplax
@githubphagocyte Jika masih menghasilkan persimpangan-sendiri, itu tidak akan memperbaiki. Ini jawaban yang valid.
Aditsu berhenti karena SE adalah JAHAT
Ini telah ditandai karena melanggar salah satu aturan di pusat bantuan kami : Semua solusi untuk tantangan harus [...] menjadi pesaing serius untuk kriteria kemenangan yang digunakan. Misalnya, entri ke kontes golf kode perlu di-golf.
Dennis
@ Dennis lebih baik sekarang, mr. polisi? : p
aditsu berhenti karena SE adalah JAHAT
6

Mathematica

Keluar dari kompetisi, bukan bahasa gratis

f[n_] := PolyhedronData[Sort[PolyhedronData["Archimedean", 
                                             {"FaceCount", "StandardName"}]][[n, 2]],  "NetImage"]

Pemakaian:

f /@ Range@13

Grafik Mathematica

Belisarius
sumber