首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制Reutersv rd三角

绘制Reutersv rd三角
EN

Code Golf用户
提问于 2017-01-14 01:13:00
回答 2查看 1.7K关注 0票数 37

这个不可能对象[医]雷克斯瓦德三角

根据以下规则绘制您自己的版本:

  • 整整9个立方体
  • 每边都是由四个立方体组成的。
  • 多维数据集似乎重叠,因此呈现的对象实际上是一个不可能的对象。
  • 有四种不同的颜色??背景一种,立方体的每个面三种。
  • 在位图输出中,整个三角形应该至少有100个像素高和至少100个像素宽。
  • 长宽比:整个三角形的宽度和高度不应超过2倍。
  • 该三角形可以相对于上述图像旋转任意大小。
  • 三角形相对于上述图像可以被反射,也可以不被反射。
EN

回答 2

Code Golf用户

发布于 2017-01-14 07:32:39

Mathematica,237个字节

代码语言:javascript
复制
n={-1,1}#&;c_~g~s_:=Polygon[c+s#&/@{k={12,9},m=n@k,t={0,-12}}];p={#,#2~g~1,#3~g~-1}&;a=p[Cyan,#-k,#+m]&;b=p[Blue,#-t,#+k]&;c=p[Red,#-m,#+t]&;Graphics@{{a@#,b@#,c@#}&/@{j=4k,s=4{4,9},n@s,4m,r={-32,8},q=-4{4,5},4t,n@q,n@r},a@j,b@s,c@j,c@s}

易读版本:

代码语言:javascript
复制
1  n = {-1, 1} # &;
2  c_~g~s_ := Polygon[c + s # & /@ {k = {12, 9}, m = n@k, t = {0, -12}}];
3  p = {#, #2~g~1, #3~g~-1} &;
4  a = p[Cyan, # - k, # + m] &;
5  b = p[Blue, # - t, # + k] &;
6  c = p[Red, # - m, # + t] &;
7  Graphics@{
8    {a@#, b@#, c@#} & /@
9      {j = 4 k, s = 4{4, 9}, n@s, 4 m, r = {-32, 8},
10       q = -4{4, 5}, 4 t, n@q, n@r},
11   a@j, b@s, c@j, c@s}

第1行定义了一个函数n,它否定有序对的第一个坐标。第2行定义了一个函数g,它生成以c点为中心的(大致)等边三角形,并根据s1还是-1指向向下或向上。第3行将p定义为由颜色和两个三角形组成的平行四边形模板,第4-6行将abc定义为显示在立方体中的三种不同类型的平行图。

第8行定义了一个函数{a@#, b@#, c@#}&,它以#点为中心绘制整个立方体;第9和第10行将其应用于形成较大三角形所需的九个点。这就产生了九个立方体,从右上角开始,逆时针方向运动,后面的立方体掩盖了早期立方体的一部分。最后,第11行重新绘制四个平行图(在图片的右上角),这样它们就会像预期的那样覆盖后面的多维数据集。产出如下:

票数 18
EN

Code Golf用户

发布于 2017-01-14 02:57:18

BBC,147个字节

标记文件大小为129个字节

代码语言:javascript
复制
t=PI/1.5x=500y=x:FORi=0TO28b=i MOD3GCOL0,b:b*=t:a=i DIV9*t:IFb=0x-=99*COSa:y-=99*SINa
MOVEx,y:VDU25;66*COSb;66*SINb;28953;66*COS(b-t);66*SIN(b-t);:NEXT

使用绝对坐标规范(MOVE)和每个平行四边形的两个相对规范节省2个字节,而不是改变原点,以便能够使用所有绝对规范。消除了1字节不必要的空白。

BBC,150字节

标记文件大小127字节

http://www.bbcbasic.co.uk/bbcwin/download.html下载解释器

代码语言:javascript
复制
t=PI/1.5x=500y=x:F.i=0TO28b=i MOD3GCOL0,b:b*=t:a=i DIV9*t:IFb=0 x-=99*COSa:y-=99*SINa:ORIGINx,y
L.66*COSb,66*SINb,0,0PLOT117,66*COS(b-t),66*SIN(b-t)N.

解释

我们从右上角的坐标开始,按3组绘制菱形图。在每组3的前,我们移动原点(West,SE,SE,NE,NE )。这意味着右上角的3组是最后一个要绘制的完整组,使原点回到原来的位置。然后我们继续绘制第一组的黑色和红色(但不是绿色),总共有29个菱形。

Ungolfed

代码语言:javascript
复制
  t=PI/1.5                                 :REM 120 deg
  x=500                                    :REM coordinates of top right corner
  y=x
  FORi=0TO28
    b=i MOD3:GCOL0,b                       :REM set colour 0=black,1=red,2=green
    b*=t                                   :REM convert b to a multiple of 120deg
    a=i DIV9*t
    IFb=0 x-=99*COSa:y-=99*SINa:ORIGINx,y  :REM before each group of 3 rhombs move the graphics origin
    LINE66*COSb,66*SINb,0,0                :REM define one side of a rhombus
    PLOT117,66*COS(b-t),66*SIN(b-t)        :REM define one further corner and plot the rhombus
  NEXT

输出

票数 12
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/106799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档