的彭罗斯三角形,也被称为彭罗斯tribar或不可能tribar,是不可能的对象。
此挑战的目标是以尽可能少的字节显示Penrose三角形。
资料来源:维基百科
规则:
- 生成彭罗斯三角后,必须以数字方式显示它。
- 它们的外观必须与Wiki页面的上述图像相同(上述资源),而无需直接显示该图像。
- 具有相同配色方案的同一图像必须以至少400x400的尺寸显示。
- 应该尽可能准确。
祝好运并玩得开心点!
的彭罗斯三角形,也被称为彭罗斯tribar或不可能tribar,是不可能的对象。
此挑战的目标是以尽可能少的字节显示Penrose三角形。
资料来源:维基百科
规则:
祝好运并玩得开心点!
Answers:
仅绘制每个L形的前4个边,然后提起笔,移动到下一个L形上的相应点,放下笔并绘制该L的4个边。每个L形从上一个借来2个边。
最新编辑:使用fd
代替从黑色填充区域移至灰色填充区域setx
,并将所有移动从更改fd
为bk
以180度旋转保存一个字节:rt 210
-> rt 30
,缩短setpencolor
为setpc
(我正在使用的解释器中未记录,但可以)
rt 30 repeat 3[pd bk 200 lt 120 bk 360 rt 120 bk 80 rt 60 bk 440 pu rt 139 bk 211 rt 41] setx -2 fill fd 9 setpc 15 fill
绘制每个L形的6个边,在最后一个边上超调,然后旋转180度以开始下一个。
rt 30 repeat 3[rt 180 fd 200 lt 120 fd 360 rt 120 fd 80 rt 60 fd 440 rt 120 fd 360 rt 120 fd 200] pu setx -5 fill setx 5 setpencolor 15 fill
运行在http://www.calormen.com/jslogo/#
建议cs pd setpencolor 0
先运行以确保屏幕清晰,乌龟居中并指向上方,笔向下并设置为黑色(默认设置,全新会话不需要),并ht
隐藏乌龟(st
会再次显示。)
from turtle import*
d="t(120);fd(333);rt(120);fd(67);"
s="color(0,%r);begin_fill();fd(200);l"+d+"rt(60);fd(400);r"+d+"end_fill();fd(133);rt(180);"
exec s%'#fff'+s%0+s%'gray'
不幸的是,exec
它没有在Trinket中实现,因此无法按原样在线进行测试。至少不是免费版。我打印出字符串并粘贴为代码以对其进行测试。如果您对脚本很聪明,则可以根据需要调整html / css的大小,以获取更大的画布。让我知道你是否愿意。
在线尝试 -使用较小的尺寸,因为该站点的画布对于400px而言太小,但是您可以看到整个输出。
取消高尔夫:
from turtle import*
w=200
def f(n):
c=255*n/2
color(0,(c,c,c))
begin_fill()
fd(w)
lt(120)
fd(5*w/3)
rt(120)
fd(w/3)
rt(60)
fd(2*w)
rt(120)
fd(5*w/3)
rt(120)
fd(w/3)
end_fill()
fd(2*w/3)
rt(180)
f(2);f(0);f(1)
255*n/2
可以将其减小到128*n
我认为浮点RGB值仍将四舍五入,因此像素颜色是否会发生变化?
仅在short_open_tag
启用设置的情况下才有效。源代码包含不可打印的字符,因此有一个十六进制转储:
0000000: 3c3f 3d67 7a69 6e66 6c61 7465 2827 b329 <?=gzinflate('.)
0000010: 2e4b 5728 cb4c 2d77 caaf b0d5 3531 3000 .KW(.L-w....510.
0000020: 611d 0b08 5628 2e29 cacf 4eb5 5536 3030 a...V(.)..N.U600
0000030: b0b3 2948 2cc9 5048 b1f5 d535 35d6 3536 ..)H,.PH...55.56
0000040: b7d0 8152 c6a6 263a 8626 c6ba 8626 0660 ...R..&:.&...&.`
0000050: dac2 5cc7 14c8 b234 0452 510a 6999 3939 ..\....4.RQ.i.99
0000060: b6ca 6969 690a 2545 8979 c569 f945 b9b6 ..iii.%E.y.i.E..
0000070: 45f9 2589 25a9 1a06 9a0a fa14 990a 7415 E.%.%.........t.
0000080: a6a9 8646 949a 9b5e 945a 8969 ae2e cc60 ...F...^.Z.i...`
0000090: 7d60 88d9 0100 2729 3b }`....');
解压缩后的数据看起来像这样(为了清楚起见添加了换行符):
<svg viewBox=-400-400,800,800 stroke=#000>
<path d=M-53-378,53-378,354,143-140,143-87,50,191,50Z fill=#fff transform=rotate(0) />
<path d=M-53-378,53-378,354,143-140,143-87,50,191,50Z fill=#000 transform=rotate(120) />
<path d=M-53-378,53-378,354,143-140,143-87,50,191,50Z fill=grey transform=rotate(-120) />
</svg>
尽管SVG数据并不完全有效,但PHP会text/html
默认使用它。没有doctype声明,文档将以怪癖模式处理,这是非常宽容的。
为了改善压缩效果,我将图像分为三个“ 7”形部分,可以使用几乎相同的<path>
元素进行绘制。生成的图像将展开以填充视口。这是从500×500像素的窗口抓取的屏幕:
利用30度水平偏斜-在矩阵变换的第3个参数中,30°的切线表示为pow(3,-.5)
。
有很多丑陋的魔术数字,它与Wikipedia图片的比例并不完全匹配。我敢肯定,还有一种更“数学”的方式来解决这个问题;任何帮助,将不胜感激。
f=
_=>{with(Math)with(C=c.getContext`2d`)for(l=lineTo.bind(C),lineWidth=.01,transform(50,0,0,50,200,224),N=4;N--;rotate(PI*2/3))beginPath(fill(save(fillStyle=N?N>1?'#fff':'#000':'#777'))),transform(-1,0,-pow(3,-.5),-1,3.965,1.71),l(0,0),l(0,6),l(1,6),l(1,1),l(4.616,1),l(5.772,0),closePath(restore(stroke()))}
f()
<canvas id=c width=400 height=400>
边界和歪斜嘉豪!在Chrome上测试。请参阅CodePen的非公开版本。
body{margin:9em}b,:after{position:fixed;transform:rotate(240deg)}b:after{content:'';left:-6.1em;top:-7.95em;width:6em;height:9em;border-left:transparent 2.32em solid;border-right:2em solid;border-bottom:2em solid;transform:skew(30deg);filter:drop-shadow(0 0 .1em)}b{color:#777}b>b{color:#000}b>b>b{color:#fff
<b><b><b>
>
吧?