3D 그물 그리기-아르키메데스 솔리드


12

잘라서 접을 때 종이나 카드로 3D 모양을 만들 수있는 3D 그물에 약점이 있습니다. 이 작업은 간단하며 13 개의 아르키메데스 솔리드에 그물을 그리는 가장 짧은 프로그램을 작성했습니다. 출력은 합리적인 형식의 이미지 파일이어야합니다 (png, jpg).

13 개의 도형은 모두 http://en.wikipedia.org/wiki/Archimedean_solid 와 다음 표에 나와 있습니다.

여기에 이미지 설명을 입력하십시오

입력 : 1에서 13까지의 정수 모양이 잘린 4 면체가 1이고 "십이 면체"가 13이되도록 위의 표와 같이 정확하게 번호가 매겨져 있다고 가정합니다.

출력 : 해당 모양의 그물을 포함하는 이미지 파일. 내부 선을 포함한 외곽선 만 있으면됩니다. 색상으로 채울 필요가 없습니다

이 대회를 위해 특별히 제작되지 않은 라이브러리뿐만 아니라 원하는 프로그래밍 언어를 사용할 수 있습니다. 그러나 둘 다 온라인으로 자유롭게 사용할 수 있어야합니다.

정확히 일주일 안에 가장 적은 수의 문자로 답을 받아들입니다. 그들이 올 때마다 답변이 수락됩니다.

(아니요) 아직 승자입니다. 슬프게도 유효한 참가자는 없습니다. 어쩌면 너무 어려울까요?


시간 제한을 완전히 없앨 수 있습니까? 누군가가 일년 후에 이것을 발견하면 어떨까요? 그들이 시도하지 않기를 원하십니까? ... 플라톤을 먼저하고, 그 다음엔 어려운 것을하는 것이 낫습니다. 관심을 나누었을 수도 있습니다. 나를 위해 개인적으로 (이 모든 것이 외삽입니다), 비슷한 두 가지를 보았을 때, 나는 실제로 두 가지를보고 둘 다 해결할 방법을 계획 할 시간이 없다는 느낌이 들었습니다. 그리고 다른 방법으로는하고 싶지 않습니다. 반면에, 여기 다른 사람들은 파트 2 과제에 어려움을 겪었습니다. Minsky Register Machine을 참조하십시오. 어쩌면 당신이 아닐 수도 있습니다.
luser droog

@luserdroog 감사합니다. 질문이 수정되었습니다. 어쩌면 그것을 좋아하는 많은 사람들의 관련 질문에 대한 답변을 이메일로 보냈을 것입니다. FWIW.
felipa

나는 열심히 생각하지 않습니다 할 수 있지만,에 골프 는 사고와 거기에 각 다면체에 대한 여러 가지 그물하고 그들이 동일하게 압축하지 않기 때문에 실험의 몇 시간을 필요로한다.
Peter Taylor

답변:


9

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

언 골프 드 :

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

결과 (트리밍, 부정, 조인 및 스케일 조정) :

결과

모양은 매우 특이합니다.)하지만 내가 알 수있는 한 정확합니다 (오류가 발견되면 알려주세요). DFS에서 페이스 그래프와 절삭 사이클을 구성하여 (별도의 프로그램으로) 생성되었습니다.

나는 이것이 파이썬과 거북이를 사용하여 훨씬 더 많이 골프를 칠 수 있다고 확신합니다.

편집 : 죄송합니다. 마지막 경우는 자체 교차였습니다. 코드를 직접 수정했습니다. 업데이트 된 이미지는 다음과 같습니다.

13 개 수정


손으로 수정하면 코드가 여전히 자체 교차점을 출력한다는 의미입니까? 이것이 유효한 답변과 분리하는 유일한 것입니까?
trichoplax

@githubphagocyte 자체 교차로를 여전히 출력하면 수정되지 않습니다. 이것은 정답입니다.
SE가 EVIL이기 때문에 Aditsu 종료

이는 도움말 센터 의 규칙 중 하나를 위반하기 때문에 신고되었습니다 . 도전에 대한 모든 솔루션은 사용중인 승리 기준에 대한 심각한 경쟁자가되어야합니다. 예를 들어, 코드 골프 대회에 참가하려면 골프를해야합니다.
Dennis

@Dennis 더 나은 지금 씨. 경관? : p
SE가 EVIL이기 때문에 aditsu 종료


6

매스 매 티카

자유 언어가 아닌 경쟁에서 벗어남

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

용법:

f /@ Range@13

Mathematica 그래픽

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.