绘制3D网-阿基米德固体


12

我对3d蚊帐有一个缺点,当将其剪裁和折叠后,可以用纸或卡片制作3d形状。任务很简单,编写了可以用最短的程序绘制13个阿基米德固体的网。输出应该是任何合理格式(png,jpg)的图像文件。

http://en.wikipedia.org/wiki/Archimedean_solid以及从此处获取的下表中,描述了所有13种形状。

在此处输入图片说明

输入: 1到13之间的整数。假设形状的编号与上表完全相同,因此“截头四面体”为1,“双十二面体”为13。

输出:包含该形状网的图像文件。只需包括内部线条的轮廓即可。无需用颜色填充

您可以使用自己喜欢的任何编程语言,也可以使用不是专门为这次比赛而制作的任何库。两者都应该在线免费提供(从两种意义上来说)。

我会在一周的时间内接受最少字符数的答案。 只要有答案,答案就会被接受。

(否)获胜者。 遗憾的是没有有效的进入者。也许太难了?


也许完全取消时限?如果有人从现在开始发现这一点怎么办。您是否希望他们不要尝试?...最好先做柏拉图式的,然后再等难的。您可能已经分了兴趣。就我个人而言(所有这些都是外推法),当我看到两个相似的东西时,我有点退出了,觉得我没有时间去真正地研究两者并计划如何解决这两个问题。我也不想做其他任何事情。。。另一方面,这里的其他人在第二部分挑战中遇到了困难。参见Minsky Register Machine的。也许不是你。
luser droog

@luserdroog谢谢。问题已编辑。我也许应该补充一点,我已经通过电子邮件将相关问题的答案发送给了许多喜欢它的人!FWIW。
felipa

我不认为这是很难做的,但高尔夫它需要几个小时的思考和尝试,因为对于每一个多面体许多可能的网,他们将不会压缩同样的。
彼得·泰勒

Answers:


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中构造人脸图和切割循环生成的(在单独的程序中)。

我确信可以使用python和turtle进行更多的高尔夫运动。

编辑:糟糕,最后一种情况是自相交的。我修复了代码(手动),这是更新的图像:

已更正13


手动修复是否意味着代码仍然输出自交点?这是将其与有效答案区分开的唯一方法吗?
trichoplax 2014年

@githubphagocyte如果仍然输出自相交,那就不是解决办法。这是一个有效的答案。
aidtsu退出是因为SE为EVIL,2014年

标记这是因为它违反了我们帮助中心内的规则之一:所有挑战的解决方案都应严格
丹尼斯

@丹尼斯先生,现在好了。警察?:p
aidtsu退出是因为SE是EVIL,2016年


6

Mathematica

出于竞争,不是自由语言

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

用法:

f /@ Range@13

Mathematica图形

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.