Vẽ lưới 3d - Chất rắn Archimedean


12

Tôi có một điểm yếu đối với lưới 3d mà khi cắt ra và gấp lại cho phép bạn tạo các hình dạng 3d bằng giấy hoặc thẻ. Nhiệm vụ rất đơn giản, được viết chương trình ngắn nhất mà bạn có thể vẽ lưới cho 13 vật rắn Archimedean. Đầu ra phải là một tệp hình ảnh ở bất kỳ định dạng hợp lý nào (png, jpg).

Tất cả mười ba hình được mô tả tại http://en.wikipedia.org/wiki/Archimedean_solid và trong bảng sau đây được lấy từ đó.

nhập mô tả hình ảnh ở đây

Dữ liệu vào: Một số nguyên từ 1 đến 13. Giả sử các hình được đánh số chính xác như trong bảng trên sao cho "tứ diện cắt ngắn" là số 1 và "khối mười hai mặt" là số 13.

Đầu ra: Một tệp hình ảnh chứa mạng cho hình dạng đó. Chỉ cần phác thảo bao gồm các dòng nội bộ là OK. Không cần phải điền nó với màu sắc

Bạn có thể sử dụng bất kỳ ngôn ngữ lập trình nào bạn thích cũng như bất kỳ thư viện nào không được tạo ra đặc biệt cho cuộc thi này. Cả hai nên có sẵn miễn phí tuy nhiên (theo cả hai nghĩa) trực tuyến.

Tôi sẽ chấp nhận câu trả lời với số lượng ký tự nhỏ nhất trong đúng một tuần. Câu trả lời sẽ được chấp nhận bất cứ khi nào họ đến.

(Không) Người chiến thắng nào. Đáng buồn là không có người đăng ký hợp lệ. Có lẽ nó quá khó?


Có thể loại bỏ hoàn toàn giới hạn thời gian? Điều gì sẽ xảy ra nếu ai đó tìm thấy điều này một năm kể từ bây giờ. Bạn có muốn họ không thử không? ... Có thể tốt hơn là làm Platonic trước, chờ đợi, sau đó là khó. Bạn có thể đã chia lãi. Đối với cá nhân tôi (tất cả những điều này là ngoại suy), khi tôi thấy hai cái tương tự, tôi đã rút khỏi nó, cảm thấy tôi không có thời gian để xem xét cả hai và lên kế hoạch giải quyết cả hai. Và tôi sẽ không muốn làm điều đó theo bất kỳ cách nào khác .... Mặt khác, những người khác ở đây đã gặp khó khăn với các thử thách Phần 2. Xem các máy đăng ký Minsky. Có lẽ đó không phải là bạn.
luser droog

@luserdroog Cảm ơn. Câu hỏi được chỉnh sửa. Tôi có lẽ nên thêm rằng tôi đã gửi email câu trả lời cho câu hỏi liên quan xung quanh rất nhiều người yêu thích nó! FWIW.
felipa

Tôi không nghĩ rằng nó khó để làm , nhưng để chơi golf cần nhiều giờ suy nghĩ và thử nghiệm vì có nhiều lưới có thể cho mỗi khối đa diện và chúng sẽ không nén tốt như nhau.
Peter Taylor

Câu trả lời:


9

Java, 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"));}}

Ung dung:

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));
    }
}

Kết quả (cắt, phủ định, nối và chia tỷ lệ):

các kết quả

Các hình dạng khá bất thường :) nhưng chính xác theo như tôi có thể nói (hãy cho tôi biết nếu bạn tìm thấy bất kỳ lỗi nào). Chúng được tạo ra (trong một chương trình riêng biệt) bằng cách xây dựng biểu đồ khuôn mặt và cắt các chu kỳ trong DFS.

Tôi chắc chắn rằng điều này có thể được chơi golf nhiều hơn nữa bằng cách sử dụng ví dụ như trăn và rùa.

Biên tập: tiếc, trường hợp cuối cùng là tự giao nhau một chút. Tôi đã sửa mã (bằng tay), đây là hình ảnh được cập nhật:

13 sửa


Liệu sửa chữa bằng tay có nghĩa là mã vẫn xuất ra một giao điểm tự? Có phải đó là điều duy nhất tách biệt điều này thành một câu trả lời hợp lệ?
trichoplax

@githubphagocyte Nếu nó vẫn vượt ra khỏi giao lộ tự, nó sẽ không phải là một sửa chữa. Đây là một câu trả lời hợp lệ.
aditsu nghỉ việc vì SE là EVIL

Điều này đã được gắn cờ vì nó vi phạm một trong các quy tắc trong trung tâm trợ giúp của chúng tôi : Tất cả các giải pháp cho các thách thức nên [...] là một ứng cử viên nghiêm trọng cho các tiêu chí chiến thắng được sử dụng. Ví dụ, một mục tham gia một cuộc thi golf mã cần phải được đánh gôn.
Dennis

@Dennis tốt hơn bây giờ, ông. cảnh sát? : p
aditsu bỏ vì SE là EVIL


6

Toán học

Không có cạnh tranh, không phải là một ngôn ngữ tự do

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

Sử dụng:

f /@ Range@13

Đồ họa toán học

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.