目标是根据以下规范输出或显示带有€(欧元)符号的图像(忽略符号的边框)。
来源:http : //en.wikipedia.org/wiki/File : Euro_Construction.svg
规则:
目标是根据以下规范输出或显示带有€(欧元)符号的图像(忽略符号的边框)。
来源:http : //en.wikipedia.org/wiki/File : Euro_Construction.svg
规则:
Answers:
(96为程序,4为命令行开关前缀)
充分打高尔夫球和手工打标:
$ hexdump -C euro.ps
00000000 68 20 88 78 92 36 92 38 92 8b 88 4b 88 3c 92 ad |h .x.6.8...K.<..|
00000010 88 00 88 00 88 3c 88 2d 88 ce 92 05 88 00 88 00 |.....<.-........|
00000020 88 32 88 d8 88 28 92 06 92 16 88 b9 88 fb 92 6b |.2...(.........k|
00000030 88 b5 88 f1 92 63 88 13 88 f1 92 63 88 17 88 fb |.....c.....c....|
00000040 92 63 92 16 88 b9 88 0f 92 6b 88 b5 88 05 92 63 |.c.......k.....c|
00000050 88 1b 88 05 92 63 88 1f 88 0f 92 63 92 16 92 42 |.....c.....c...B|
00000060
您可以在此处获得一份副本,以供自己查看。
在看到@ThomasW的答案并仔细考虑了我的程序之后,我意识到自己可以做得更好。
标记化版本与此等效:
h 120 div dup scale
75 60 translate
0 0 60 45 -50 arc
0 0 50 -40 40 arcn
closepath
-71 -5 moveto
-75 -15 lineto
19 -15 lineto
23 -5 lineto
closepath
-71 15 moveto
-75 5 lineto
27 5 lineto
31 15 lineto
closepath
fill
优化说明:
首先,我将第一个解决方案转换为一些更简单的子路径的并集,而不是限制整个事物的一个路径。我借用了Thomas的输入参数方法,这比我以前的方法要好得多。
然后我将所有坐标乘以10,然后将所有内容四舍五入,以得到整数坐标。我还对角度进行了四舍五入,并将两个大的角度转换为等效的负角度。这方便地使每个数字都介于-128和127之间。
然后我标记了一切。每个运算符都可以用两个字节的序列表示。并且由于每个数字都可以由一个带符号的字节表示,因此每个数字也只能变成两个字节。我唯一不能使用的部分是h
开头,但是也只有两个字节,只是h
和后跟一个空格。
运行为:
gs -dh=200 euro.ps
gs -dh=80 euro.ps
gs -dh=20 euro.ps
使用编码的用户路径,我设法将程序大小减少了几个字节。这些程序中的每一个都等效于第一个程序,产生相同的输出:
92个字节:
hexdump -C euro.ps
00000000 68 20 88 78 92 36 92 38 92 8b 88 4b 88 3c 92 ad |h .x.6.8...K.<..|
00000010 7b 7b 88 b5 88 c4 88 2d 88 3c 30 20 30 88 3c 88 |{{.....-.<0 0.<.|
00000020 2d 88 cf 30 20 30 88 32 88 d8 88 28 88 b9 88 fb |-..0 0.2...(....|
00000030 88 b5 88 f1 88 13 88 f1 88 17 88 fb 88 b9 88 0f |................|
00000040 88 b5 35 88 1b 35 88 1f 88 0f 7d 8e 0b 00 07 08 |..5..5....}.....|
00000050 0a 01 23 03 0a 01 23 03 0a 7d 92 b3 |..#...#..}..|
0000005c
等效于:
h 120 div dup scale
75 60 translate
{
{-75 -60 45 60
0 0 60 45 -50
0 0 50 -40 40
-71 -5
-75 -15
19 -15
23 -5
-71 15
-75 5
27 5
31 15}
<00 07 08 0A 01 03 03 03 0A 01 03 03 03 0A>
} ufill
稍微违反直觉的令人困惑的解决方案仅保存91个字符即可节省一个字符:
$ hexdump -C euro.ps
00000000 68 20 88 78 92 36 92 38 92 8b 88 4b 88 3c 92 ad |h .x.6.8...K.<..|
00000010 5b 5b 8e 1e b5 c4 2d 3c 00 00 3c 2d ce 00 00 32 |[[....-<..<-...2|
00000020 d8 28 b9 fb b5 f1 13 f1 17 fb b9 0f b5 05 1b 05 |.(..............|
00000030 1f 0f 7b 92 38 88 7f 92 50 7b 32 35 36 92 a9 7d |..{.8...P{256..}|
00000040 92 54 7d 92 49 5d 92 32 8e 0b 00 07 08 0a 01 23 |.T}.I].2.......#|
00000050 03 0a 01 23 03 0a 5d 92 32 92 b3 |...#..].2..|
0000005b
等效于:
h 120 div dup scale
75 60 translate
[
[
<b5 c4 2d 3c
00 00 3c 2d ce
00 00 32 d8 28
b9 fb
b5 f1
13 f1
17 fb
b9 0f
b5 05
1b 05
1f 0f> {dup 127 gt {256 sub} if} forall
] cvx
<00 07 08 0A 01 23 03 0A 01 23 03 0A>
] cvx
ufill
h
因为二进制标记是自定界的。顺便说一句,你是怎么编码的?我是用一个标准的十六进制编辑器完成的,这很乏味。
是的,数学!我正在绘制满足某些(相当复杂)不平等的区域:
e=RegionPlot[(1<Abs@y<3||c)&&{x,y+12}.(d=2{-5Sin@40°-6,m=5Cos@40°})*{x+15,y+1-2Sign@y}.d<0||c&&x<2m/.c->100<x^2+y^2<144,{x,-15,9},{y,-12,12},Frame->0>1,ImageSize->#]&
用法是e[height]
,例如e[100]
:
或e[200]
:
您可能会注意到,较锐利的边缘略微变圆了。这是因为只能通过对空间中的点进行采样来绘制区域,而Mathematica默认情况下不会对每个像素进行采样。可以通过添加另一个选项PlotPoints->#
(每个像素使用一个样本)来增加采样分辨率 ,该选项增加了14个字符。我不建议使用该选项运行它,因为它会大大增加运行时间,并且几乎不会增加视觉吸引力#/4
。因此,(在OP批准后)它不包括在分数中。
这是一个稍微松散的版本:
e[height_] := (
angle = 40°;
d = {-5 Sin[angle] - 6, 5 Cos[angle]};
RegionPlot[
(Abs[y] > .5 && Abs[y] < 1.5
||
r > 25 && r < 36)
&&
{x, y + 6}.d > 0
&&
{x + 7.5, y + .5 - Sign[y]}.d < 0
||
r > 25 && r < 36 && x < 5 Cos[angle]
/. r -> x^2 + y^2
,
{x, -7.5, 4.5},
{y, -6, 6},
Frame -> False,
ImageSize -> height
]
);
请注意,在高尔夫球版中,我将坐标系缩放了2倍以避免.5
s,但是事实证明,字符数实际上是相同的。
这是我如何计算公式的说明。我将形状分为两个区域。一个包含环和条纹,并在BCDE
斜率处向右切开,在IJ
和GH
斜率处向左切开(稍后会详细介绍)。另一个包含相同的环,但只是在point 的x坐标处被切除D
。这两个区域的条件与组合||
,在此充当集合联合。
圆环仅定义为5 < r < 6
,其中r
是到原点的距离。r²
尽管(x²+y²
)更容易解决,所以我一直25 < x² + y² < 36
在获取环中的所有点。
条纹介于±.5
和之间±1.5
。通过取y的模数,我们可以同时处理两个条纹,因此(无限长)条纹恰好满足.5 < |y| < 1.5
。同样,要使用条纹和戒指的结合,我只是使用||
。
有趣的事情可能是如何获得“蒙版”。Point D
的x坐标为5 cos 40°
,因此遮罩的下边缘(仅与环结合使用)正好为x < 5 cos 40°
。可以通过设置相交将其&&
应用于逻辑。
其他面具是真正棘手的部分。首先,让我们获得的斜率BCDE
。我们可以轻松地分别构造点C
和D
,as (0, -6)
和5 (cos 40°, sin 40°)
。沿直线指向的向量为D - C = (5 cos 40°, 5 sin 40° + 6)
。要在右侧应用遮罩,我只需要弄清该点是位于该线的左侧还是右侧(我们称其为line vector p
)。我可以通过采取矢量从摸不着头脑C
,以我的兴趣点,并投射到一个向量垂直于p
。投影的符号会告诉我该点在哪一侧。在2D中获取垂直向量非常简单:翻转坐标并反转其中之一的符号。那是d
我代码中的变量:(-5 sin 40° - 6, 5 cos 40°)
。从C
到兴趣点的向量q = (x, y)
是q - C = (x, y + 6)
。投影只是之间的标量积(或点积)q
和d
。我选择的方式d
恰好指向左侧,所以我想要d.(q-C) > 0
。此条件适用于右侧面罩。
对于左手面具,我可以使用基本相同的想法。斜率是相同的,因此也是如此d
。我只需要从条纹的左下角而不是从偏移我的点即可C
。那些具有坐标(-7.5, 0.5)
(上部条纹)和(-7.5, -1.5)
(下部条纹)。因此,这将需要针对两个条纹的两个独立规则。但是,请注意,受下遮罩影响的所有点都在下条纹中,因此具有负y。并且受上遮罩影响的所有点都为正y。因此,我可以简单地切换我使用偏移量Sign[y]
是1
正,-1
负y
。所以我的补偿点变成(-7.5, -0.5 + Sign[y])
。否则,该蒙版的工作方式就像右侧蒙版一样。当然,这次的预测需要为负。因此,天真地像是这样RH-projection > 0 && LH-projection < 0
(这也是我最初在代码中所拥有的)。但是我们可以缩短这个时间,因为将正数和负数相乘必须得到一个负数,所以它就是正数RH * LH < 0
(其中RH
和LH
是各自的投影)。
而已。将所有内容放在一起会导致以下逻辑结构:
(
(is_in_circle || is_in_stripe)
&&
is_between_left_and_right_mask
)
||
(
is_in_circle && left_of_edge
)
为了清楚起见,我解释中的坐标是指挑战中给出的构造图。如上所述,我的代码实际上将所有这些都乘以2
-我将其更改为保存字节,但是字节数实际上是相同的,因此不必费心再次更改。整数看起来也更好。
RegionPlot
它仅对满足给定条件的空间中所有点进行着色。因此,给定它x^2+y^2<1
会画一个单位圆。我将为实际数学添加一个解释(今晚晚些时候)。
INPUTh:w=h/12s=w/2.4p=25VDU22,6,29,640;400;p,4,0;1.5*w;p,153,6*w;0;p,4,0;1.5*w;p,159,h/3.1;4.7*w;p;9*s;9*w;p,87,h/3.1;-19*w;p,4,-7.5*w;0;p;s;w;p,85,4.5*s;0;p,81,s;w;p;s;w;p;s;w;p,85,-7.5*w;2*w;p,81,s;w;
在http://www.bbcbasic.co.uk/bbcwin/bbcwin.html下载仿真器
在BBC基本版中,所有图形都是使用机器特定的ASCII控制字符在低级处理的(为方便起见,也可以使用一些高级命令作为常用命令。)此处使用的命令是22(更改显示模式)29(更改原点)和25(等效于PLOT语句),该语句在X和Y参数之前需要一个附加的动作参数(在背景/前景中以相对/绝对移动绘制线,圆,三角形等)。
因此,我要做的就是将大量字符发送到VDU控制器。以分号结尾的值是16位。其他都是8位。发送到VDU控制器的字节总数为91,尽管它本身不符合答案的要求,因为到那时该大小已被硬编码。
原点的明显位置是圆的中心,但实际上在制作钢筋时涉及更多命令。因此,我将原点向下移动1.5到下部条形的底部,这减少了所需的分数和负数。它保持在以圆心为中心的垂直线上,这很重要,因为线E从此垂直线开始。
实际上,我只需要从图形上计算出3个数字:C形的顶部内角(5 cos 40,5 sin 40 + 1.5)=(3.8302,3.1394 + 1.5)=大约(12 / 3.1,4.6)和E:x / y = 3.8302 /(6 + 3.1394)= 0.4157 =大约1 / 2.4
由于我只有免费评估版(已解释),因此我将符号高度作为用户输入。如果您购买完整版(29.99GBP),则可以进行编译,然后使用阅读命令行w=VAL(@cmd$)/12
。
非高尔夫代码
在高尔夫球代码中,只有一个VDU语句,但是在非高尔夫球代码中,为了清楚起见,我将其分解为多个。另外,由于BBC基本版是p,0,
低端字节序的,因此可以组合使用该组合,p;
但是为了清晰起见,我不再赘述。
INPUT h
w=h/12 :REM w is the width of the line, which is 1/12 the height of the symbol, hardcoded at 900.
s=w/2.4 :REM s/w is the gradient x/y of line E. s is the horizontal offset of the top and bottom of the ends of horizontal bars
p=25 :REM VDU p,action,x;y; is the equivalent of PLOT action,x,y
VDU 22,6 :REM change mode
VDU 29,640;400; :REM set origin
VDU p,4,0;1.5*w; :REM move to centre of circle
VDU p,153,6*w;0; :REM draw circle in foreground colour
VDU p,4,0;1.5*w; :REM move to centre of circle
VDU p,159,h/3.1;4.6*w; :REM draw circle in background colour, ending at the upper inner point of the C shape.
VDU p,0,9*s;9*w; :REM move relative along slant gradient, 9 spaces in y direction, to define the upper cut on the circle
VDU p,87,h/3.1;-19*w; :REM draw triangle in background colour, based on the last two points and the absolute point specified here (vertical line for lower cut)
VDU p,4,-7.5*w;0; :REM move absolute to bottom left of lower bar
VDU p,0,s;w; :REM move relative to top left of lower bar
VDU p,85,4.5*s;0; :REM draw triangle to bottom right corner of lower bar (absolute)
VDU p,81,s;w; :REM draw triangle to top right of lower bar (relative)
VDU p,0,s;w; :REM move relative to bottom right of upper bar
VDU p,0,s;w; :REM move relative to top right of upper bar
VDU p,85,-7.5*w;2*w; :REM draw triangle to bottom left of upper bar (absolute)
VDU p,81,s;w; :REM draw triangle to top left of upper bar (relative)
n
为带有8x8位图的欧元符号,如下所示:VDU 23,n,30,33,120,32,120,30,30,0
。根据Wikipedia的说法,BBC Basic仍在开发中,主要用于移动设备。
VDU 23,n,30,33,124,32,120,33,30,0
。感谢您的记忆之旅。
<svg viewBox=-7.5,-6,12,12
onload=this.style.height=prompt()><clipPath
id=c><path
d=M5-6,1.8,1.5,3.8,3.2V6H-9.4L-7.1,.5-7.5-.5-5.2-6>
</clipPath><g
clip-path=url(#c) fill=none stroke=#000><circle
r=5.5 /><path
d=M-8,1h15M-8-1h15>
尽管这仅使用SVG内容,但它在很大程度上依赖于宽松的HTML解析,因此必须作为HTML来使用。严格的SVG需要更多的字节。
</svg>
。哦,这种标记太可怕了。我希望你为自己感到羞耻。;-)
</svg>
不去尾随,我只会看到圆圈而不是线条(在独立文件中,可能不会在标记JS Bin中添加)。
evt.target
为this
,节省6个字节。
<style>*,:after,:before{position:absolute;width:20;content:"";background:#fff}#a{margin:150;height:20;border:2px solid;border-radius:20px}#a:after{width:10;height:10;bottom:0;right:-8}p{top:7;left:-6;width:29;height:2;border:solid;border-width:2 0;transform:skewX(-23deg);margin:0;background:0}p:before{width:2;height:4;bottom:-3;left:-.5}p:after{width:16;height:16;bottom:-3;right:-8}</style><div id=a><p><script>document.getElementById('a').style.transform='scale('+(prompt()/24)+')'</script>
并不是最小的答案,但是即使召唤我所有的css-minification-fu我也能得到最小的答案
上面带有“ px”的代码在Firefox和IE中有效,但在Chrome和Safari上却不太适用,因为它们对单位的要求不高:)
我还必须重新添加px才能使jsfiddle工作:
100:
200:
<style>
*,:after,:before{
position:absolute;
width:20;
content:"";
background:#fff
}
#a{
margin:150;
height:20;
border:2px solid;
border-radius:20px
}
#a:after{
width:10;
height:10;
bottom:0;
right:-8
}
p{
top:7;
left:-6;
width:29;
height:2;
border:solid;
border-width:2 0;
transform:skewX(-23deg);
margin:0;
background:0
}
p:before{
width:2;
height:4;
bottom:-3;
left:-.5
}
p:after{
width:16;
height:16;
bottom:-3;
right:-8
}
</style>
<div id=a><p>
<script>
document.getElementById('a').style.transform='scale('+(prompt()/24)+')'
</script>
skewX
把戏可能会让我感到孤单。
getElementById
减少6个字符。然后您可以使用CSS中的ID再减少2个
p
结束标记后没有更多内容,则可以省略结束标记(按规范)。并且我还要检查浏览器是否自动关闭div
(尽管规范禁止,但它在FF上
高尔夫版本,带有二进制令牌:
$ hexdump -C euro_golfed.ps
00000000 68 20 31 32 20 92 36 92 38 92 8b 37 2e 35 20 36 |h 12 .6.8..7.5 6|
00000010 92 ad 35 20 36 0a 31 2e 38 20 2d 31 2e 35 0a 33 |..5 6.1.8 -1.5.3|
00000020 2e 38 20 2d 33 2e 32 0a 33 2e 38 20 2d 36 0a 2d |.8 -3.2.3.8 -6.-|
00000030 39 2e 34 20 2d 36 0a 2d 37 2e 31 20 2d 2e 35 0a |9.4 -6.-7.1 -.5.|
00000040 2d 37 2e 35 20 2e 35 0a 2d 35 2e 32 20 36 92 6b |-7.5 .5.-5.2 6.k|
00000050 37 7b 92 63 7d 92 83 35 2e 35 92 14 30 92 6f 2d |7{.c}..5.5..0.o-|
00000060 38 20 2d 31 0a 2d 38 20 31 92 6b 32 7b 31 35 20 |8 -1.-8 1.k2{15 |
00000070 30 92 85 92 6b 7d 92 83 30 20 30 20 35 2e 35 20 |0...k}..0 0 5.5 |
00000080 30 20 33 36 30 92 05 92 a7 |0 360....|
00000089
ASCII版本:
h 12 div dup scale
7.5 6 translate
5 6
1.8 -1.5
3.8 -3.2
3.8 -6
-9.4 -6
-7.1 -.5
-7.5 .5
-5.2 6
moveto
7{lineto}repeat
clip newpath
5.5 0
-8 -1
-8 1
moveto
2{15 0 rlineto moveto}repeat
0 0 5.5 0 360 arc
stroke
另存为euro.ps
并使用Ghostscript运行
gs -dh=80 euro.ps
gs -dh=20 euro.ps
由于PostScript中没有象素之类的东西,因此该高度用点来解释。我为命令行上的开关计算了+6。
DC
线不能正确剪切水平条纹。从垂直向下D
,在正确的地方不剪“圆圈”形状,降低:(貌似同样是你的SVG的答案了。
import turtle,sys
from math import *
q=sqrt
h=int(sys.argv[1])/24
t=turtle.Turtle()
z=t.begin_fill
y=t.end_fill
x=t.goto
w=t.towards
v=t.fd
u=t.circle
r=t.seth
o=t.setx
n=t.xcor
t.pu()
x(10*h,0)
t.left(90)
t.circle(10*h,40)
z()
A=w(0,-12*h)
B=2/sin(A*pi/180)
u(10*h,280)
r(-90)
C=n()/h
v((q(144-C*C)-q(100-C*C))*h)
D=w(0,0)
r(D+90)
u(-12*h,D+135.42)
y()
F=2*pi/9
G=h*cos(F)/(5*sin(F)+6)
x(45*G,-3*h)
z()
o(-15*h)
r(A)
v(B*h)
o(45*G+15*h+n())
y()
x(65*G,h)
z()
o(-15*h)
r(A)
v(B*h)
o(65*G+15*h+n())
y()
t.ht()
input()
python % 100
和python % 500
分别为:
c
一次,因此仅以as调用它实际上会更短math.cos
,而且我认为可能还有其他一些您可以省略来缩短总长度。
from math import *
删除math.
前缀来删除六个字符。
u=t.circle
,但过了几行之后,您却忘记了t.circle(...)
调出电话。
(编辑:显然,IJ和GH应该与BCDE平行。现在已修复)
该脚本输出SVG图像,但text/html
默认情况下将其用作。我认为大多数浏览器会将其视为包含嵌入式SVG图像的HTML网页。无论如何,这似乎对我来说还行。
图像的高度作为查询字符串参数传递。(注意:字节数在第3行的末尾包含换行符,这对于正常工作是必需的)。
<?php $x=$_GET['x']/12;$a=$x*5;$b=$x*6;$c=$x*7;$d=$x*12.4884;$e=$x*2.2863;$f=$x*5.5;$g=$x*.4157;$h=$x*6.5;$i=$x*7.5;$j=$x*12;$k=$x*11.3302;$l=$x*9.1628;$m=$x*8;$s=$x*12;echo<<<Q
<svg width="$s" height="$s"><clipPath id="c"><path d="M$d 0H$e L0 $f L$g $h L0 $i V$s H$k V$m H$l z"/></clipPath><g clip-path="url(#c)" fill="none" stroke="#000" stroke-width="$x"><circle cx="$i" cy="$b" r="$f"/><path d="M0 $a H$k M0 $c H$k"/></g></svg>
Q;
preg_replace_callback()
是缩放数值的一种更有效的方法。此代码产生的输出与原始版本相同。(编辑:由于Einacio而进一步减少)
<?php
echo preg_replace_callback('/[\d\.]+/',function($m){return$m[0]*$_GET['x']/12;},'<svg width=12 height=12><clipPath id=c><path d=M12.4884,0H2.2863L0,5.5,0.4157,6.5,0,7.5V12H11.3302V8H9.1628z /></clipPath><g clip-path=url(#c) fill=none stroke=black stroke-width=1><circle cx=7.5 cy=6 r=5.5 /><path d=M0,5H11M0,7H11 /></g></svg>');
euro.php?x = 60
euro.php?x = 200
width
并且height
是不必要在这里。并且您需要指定xmlns
使其在大多数浏览器中呈现(经过测试的Firefox和Chrome;即使发送了SVG的正确MIME类型,它们都将其呈现为XML,而不是SVG)。ideone.com/JkqVL0(删除369字节解决方案的硬编码x值)
text/html
。Chrome和Firefox对此没有任何问题,尽管我刚刚发现Safari更具固定性。
text/html
with <svg>...
被解释为带有svg
元素的HTML文件,该元素不需要the,xmlns
但需要width
and height
。我在考虑一个SVG文件,它需要适当的xmlns
。您的代码很好。
我认为有人可能会做得更好,但是让我们开始吧。
echo /Td6WFoAAATm1rRGAgAhARwAAAAQz1jM4H+YGLhdAB4Py4cR2M5mkQ+DHsr9ezPUf+m32igxdiVmIE0qCW1q9ylwOEETlQiK0Fsdk0viUoZ92eYvWaMHdwLoMvi6YDwnr8S/yxLAdptt59wmMVhiurpONaAjMQ9GMfk6S30qx7jrBFm5ec/+Hn3vgsK40Jb07a6/0rVXAFjJIovBtvKPxLBzhck8dVbcobncgkaX2KwqKMU/iP53UquQVeD8Nge+b3lxQ6sFl9unjQy8r1YpGcimh121n0ukvQ5j+QnWIWoLj0v3NigOOM277wOfPQkw0oxC6AA3EB18EbFisDx4CJQKfK9AGsEYoh+ILP4UnIQrlecXuly9QXblNneSkZ5FNB2XlHBxuYAPnkQl0SU/vOWtozgXSyYgwgGabdR0/K/2m8Tm9xiiqGe+HwD8zzaEOB1anMtUnFRupCUCjyl1QQ8Ca2QkLTEo7S7oPCYh6y2ztXdsIBWCvYEHa0OLIuX3t5s7DraSjYGlbiCQF0mJf4KFFBR5TXwUQxq2YHfhNHRitStzvemCYBAYNbQ3Jv6rVibvg54pYu9hdX0pqQsRABX39jyTDiizCbMOs/mFveZqDUT15nvIjsC1Z9i9fJFA1uHYgVZYZKXELaRD/umATW4sK5ADKUeoFzDYfozSjhVZMe8uZ2QnafbwCHdaDxMDq1qkabmhMV9Xa73iKNZlf/3AXXaQNe2zTLixO2UcXOgW7eJ2HrtOCXqSbWWSlDzDmycDelezms0hK7qleLNapDHZFuvr8MoVvuikKjkAX3Cc1DKnwS5wtWjn6wlx+5Q7LNQjS79ccEo9H/aPQ1mbPwekoefgMdFVYMKXImJV5EGn5p7cw1H/BScuwgzk9dV8vnpnVCz+HqeIG0wSXuBgipP548iAclUncu/NYqe3M5q19PXIsaSed44ScJn97yMdYbpjhb9J/34c1/1nIZMgFjAkAXbaOglmGTNC0VQo7/CubHyXy5OJTiyHqNUfskOTGP1A/Nla3Nag9gzKK7yiTimKbJCaZj5JcviByWuKguR/uAiDLHIAPFS9R96JeNYJEg9JyWjAMU2nSSS3AFDKpNIqNr3NLKd1BLo8JyPpnfCJswwgs1RjsjTk0McOTTeAKfEMhWlEXlNKcCV9eLunwwv7Xx5azMOUpO8KKZ5XBXZZafai1FbQqKY/0RRJ1sa6l/2YEq6hhNuiJ7KqrCM7pwXNFXUriO5o2tUWt/lgHOV0ronovl7yrPp5xUcAudDnNcZP6H9QoDiFjhidBOBsmObzQfCHlS+sMcN1t+sP3JLUxFv5jKCBFT+pjtGyugg4H8EKT4qz/V+LNEKR3FaS9SPxTq0k8sDo6PlxcRfXxkgyJ5stYsqVrLGmkeoGy0OTQ6y1lkmC5+Af9Oo2HvCvW4a4SBMobiZvsTNRzJxTh4k8drMHhYMkT8R+WGT2c9GvPmYwBSjh/NVxrT5twHKpjLB/ZsUU3+mGfkU+H49DNnHxXAla4UL3Ivp4GviWgl65SkyxfCIl678h+nIN07rvgGrSX7bt+wCvsKnIioXR+k7VYv88upJnIcjQepEtkZSCwwX81KTjdugGDt2NnWJM7wAWQjzx+wAOp1k5Lz3dEDpOXlsuOvTuNOY9b0FyBb8HF+cmWaRNKOvmbBvf4yITqthVM8PtKqYEJKwoTEm2ewAGTHcct8y7SMWnWjwdxiS9vFl2i1yWtpon54IY/uiyjyfm4HG1eO/zklccbKCkS5JnCNY1FfqKYxaGzAhjWOmuEgitjtnNJ9m1vFyllOaaWNal/otis6OD5pVG3xWbqgQVxCQZlpZcFlUvFGaQnGeDgGqzGb7mDNCMrMff+1PTjY/oKqPcwBEQl2e+aSYw/WKwJBnicO2G55kFDwfLZivL8Ye+Q1biPrJz6jUoJNVOM6jPCBQXB/1rtZiNIXcFi0oEmTs+rXPE1pijmYKWAac7+U+O00ZOHhKq+RvnpL7Hjim/stmcaDvuS2nMz6Yg8Zf0vhgtDz8OYLUWCSMMAomV8er77ODjjlRl8caLpkv6nO/kUoYoQKXztM+vQDcYujpwIJ95IoLQGrZ8niKRn3+NbfCmeSSPV3NczkBOkdZqa++NLFPV7WENQTNvlMwl8nhHbC7OIrkIitozEye0a7UevgQq4GcBYIRP4x0nMr58zoe0TqaCXL+jsfoeZitanO8y3tDCLGCLwhuuB1K4hMgy623pJCejc2UfB9XYPJqNgqm+GFFsPA1fuuypqQ7TTS/CUcT2iYxa/ksAvA0LhyYkHTll/vZoot06nt+JVnHShH3VJknmeiNku1ZBhq8gcZ3TcIuaNWEtK90P2Ah+CLIBA/k1oNlG289CeH+R5FyflWgV8XTiBDCcVC/zkiENYIW0ajAqvkBWuUvfgV+YEtmwPTVtE8oJu7IDDR5YN15OE4KWL0pnub2qOG/NAXcYxbHmS1sza6la4N+K17WInU/H7ol9INu7bH6WVZD097WHdjbi8UPHsbM88Jr9pmMPKPNlsDZD+ih154RWSLTVcjZA0jSzChqiNm0bW+0EszFDarF4tGauJtDqnRr+0t3QwC56VcRJzrCpJwkcp1NvIKHY11KRJ+mvA0x23KQijA2BPOICPYJ23z7CZLyoIkc51eXgjMVJbg3T1wrXtCMuhkwlcQ1rO8KVg3ajLk4dsyF27LaVjQFkxbHYIxhQXmRGgsMo2cO7bUuwLyYMEDKEQJgsDGj4KQIxLV+MVH5U9+ttKfBDuYc1ZKc1pVcnEWZ5vWRFHlCFfnD9Au0EIgfEu0hzx0e1JpXY73iOyahpo/yKj+FbKzVBPq99RLokDrlcOvBnG492+464GDCbQvdJQtbiYHU8bSHXLyMU38qh1IBlu0ecIKnfL426oKtyZ5TkAPaj5mELf15dRg8V5t2XL4UnjHzUryz1d3KfHcrO14AmP3Ne6YKUAXOx9H3f2xm6N9mEPvC2R9wGgvuTabZ4V9HcTR6EtjXDHzW/ZjrU0JgA5j1t8+6I4DX8mWqC1vQxUMLex5xnJm2vIcxBBf7QceJTTsKq4V0T0a6Mxc9rR9WnS9Yfma4c2Zg0voJqJ4AmkJI9IqWx5Z+WV8Ddfo0ybRM+zuOtBpWwN20Ipn/IEl+FgMp2vb9bJ60umzK6rx/KyfkcK1eT3UdS7ujlOUXSvSol5ctj8E+WEds7KSxZ6jaW33SitKUuhUOFCnE9/Uzg9DSyeSG6p3/TtymeYTUgzGFtHCRtEhQdqlmuLORmEi1WB7lDop+UaiVeZ8cdL8BUtzIrMhCYY+zbsexxUtYY0xUxRIVVGuvry/rZjwfJtIbHhsC0XvhX9ycR/kViYZYkfS240arLfwjxMtBGfpbKcY64hZOQnTA2jFIGZDWrF1frAZV94IYacIb5rIkwwp6+P3fP3kNQ5wMNXtiaJ7PiyWZUHijkNzaT2hkydrJ8cfO+m8N5OUsJPUIOZ/sa7Zx/HmHOGc6CWkSU9rJfCDLxXCTMGL9ubU6RX7Zr++sjXIFGWkVrflysVVdQ8n9ifEyFDeX/r8YoKj2S2T32/jACXwySEsd/rEoYgJcOnHo/NuLnk1LZxt6S9D8GUqy342fzhXaPL7+Xy53/j03+7YlooLsZH+oTtid0ijLlRtSFwQtlJa9uusHfP+GnBrJplJyunwnLTtQ+QC8BgXXB+p5cTiJ3BfYUco/yH+aFcRtQZ0IXRk0z0BN7A1R5fWcnBvgbjJJBNN2RB5MWqtRTctGPJeHPylI4j2Pa2K0qm5pGrFFWof8LcmsQGTtnGm5AUrGBCaVk0WxgZMY1Gqqls3UoeAy3+NWdXHJPz70I9vHvB+CiUhAzGs+B/9YPRrTpS9lMOioHRrRgM7k+WDOFhKs2ZPaxlWk7LqGpf8yISw0U0uYyXYFCJcLIeVYz5yKYGejVaKQEUQOvsxJf7E/SVHcG+o60pe0e0ONCub8ttIw17Cehy96JUO50bD62BkgtepSAg101mFMTo5EfvxSZ5mcJk1dQKRxR5pkHNlmUuPHdrBm/t1HgN/HQ37aNRYrZGWGRgUVMBgZoCHu6ZQ/NLtoFs75pxa8TDZ2N1KVngWCsUI0WT+ouyhRSixloz11fihaHRIaTS5VukEVcXosOzdhlka7YmhWxS0f0y7LfW1ugBxecKuSrBzsFa7hVM/iEYldMSR7ozzhhLGHRnVOc8yECM3CvEgE3qcS86jJA4+tjCW2CViftkQbVQ9xUJZeALqNF6bkFqknmwbiCVGkpNYjon4I46XPUl+7Fm8YLy2+VHTn2uMFhE9vGfqfgIS5PAyMttOB1iFxgljxRpQfI2jqwzEscF0v8IPVnZMrk6Otcrwq0kW27aR2NIElOBq/7Na5WlvFniNITn45BTSCNWm8ijx1VQR/cpRz0TlPwChXj1x6rACGII6hVWcd4MBWL/oOIGW/Yfj6CFuAU7hQrAH/Wk+YF6920XeFTTtzusQnqS/Ha4bE5tLZsPW0Bv53oFohSbBZexHufmkIO4wzfgEsH//T6X8vdCx70gDV5leqt+Wrpbkh6fo8IJptuGjnuH0oPUcTt5e/77Yn/PsPsjqjC7RQhSsDugi4GIbbEN7SdBbS69zg7NeN5lI53gZfN+mjcXCQzhC9J2DmYWmqhJ8XblMbAvcrARtQWBKZuOLSzgRkAToONyWndfTy/n/QpBJPJmF2KkUAncc9t4e8I5zdzClXBKQb6O1AIuDTs/M7mX/MdB2tHEqenLoOD+V9sTdT86Uub0BasAh0R5hvi2Iorm7llfPjy3aGbbogeN4J052oZx1aBTWTbUgX7vi2v6+ijQIMd4WnxYcIgebIZAZIHzjf+e28h3TXHyQIj4ExFH73KtUmbeEBmfmby8mGavm4SmmcMrVtlQflXYa1cpzm4ou9N31ARgxXMBNLbdmeWNSZ7Cjww8SX3ranoZGKofMJ/GUNEW4m/zyDyb9d7QPRIKYc56dWffu/7VhmlqAWrTJPNoi+vJSWe957pRibDGVaxcsHm36AVEffhabj3BsIkFnRGBozsQX+15QkpOqGy/gONQNdzQR7gdHDfo7XqhrbgvTwgNhXNITA39pWovQ+3izHtqSwQp6qKHa79WfPPVTYyZ0C97yUvOsRBWd9upeF6lIycXQYZyqx6YGB36HiyOZi2DNDGN457CZU+41UsLsbrliLrK5jVf8TiGjC/JcYZ6OZ8R2cASh1yK+746LUdQdQt2oRUZBuL5b5aMAuSyFM7AyTR/pL8vUYjGRAsO3jp1HLldgJPK8Sd8BzbbAza9FpPtvZfWXmgRhSqD6cH7hsG6p9579iOtJWNBNDJXnM8KZOICYFYvaiqSy+yFb55Xz4OBO+c9n1+Kru7DVpldr7D+3PZgrvwiVxy3pDC63pIzGkEkCyUNOVB2/a/3cjYgnBOI2rcMqnW4QOkvEjtG0LCQ99R5UJgxAovxs3mJvWI4MTPGVmOKC78jMaltZFSVOQJClEMbxsJ0ZiCBu3LlwKo+eYXfQ541G0+zBD6vGw8TVTwdx/Pv1UvGPOwJyoDJ4wwDxcxUvJgGTEOXS/Uf/VXJYcxPXi5K9bHGCXQx555XTkz63DxHXndKVDifbvW8uVOMLwr0RH36QeAXJmaeOIhUY80lDuvwHH5KSakMoknHbAqbzQRgYovZflW80b2FL1deHFmagseXjj7dQPwVlM6g+JbIH06PoRV/KLnzoTGx/XayzXOntWuNf6M+H8rDJwSTC8B+zGEe0PHPEWi7JmFTXpX5zE7wn3v5kHl9dq9yKof5IUUxOrQgErFxiZjDIptmjfaCiZ6j7gaNdfCLQvOOna4/Z65Nw9M1Uk+/BjrygmO2fansroWxBwCzGmQYHIaMko8+NYesi5Xr8zCptzh00NbPqclbr8Ifc20Uyr2oOcuNL//8mgrDUhw8YdGscmONcc7SgA52V5hh5M8cftXGgYUtyZCa7tmU3bCvBiQXhUA1c3pld8g1Isjncr6BvikWEDwZF5dGSNfnZcvcI/2hwEWhUbq12T3+a8fs9XWPHRHbJ3SCbJF6nGAMmyeDmOqKs41lmQdWwLcGhNicyhgfJrP+wHgnyUavSItqMXfAj/0b/jut1wzgcuxivQzARFCmbODeMCTljqSRIuAHEpC+OPXkz/eZFVRxq4+sIx5CnuDPnu+FAFBAJLlfy+B3gpDGSuHhJzxAVbBQASI6eAAkn0cjokCpBNEEhtOWihPzE37rlSBkFpA6W4/gyhqOQmS8AcyFkrK4DZERHy72p7p0pthswVZpebykXA6fqHw9qJtNzFS3A65Z+Fn4qIqZvxBKIfQDz3GnwnUs2uxZUubU5Dzx5vYVmXvs0WSbFD99m/iYyHWfgVi+SPxjoRW/wx6WEF966pDTwH1IAQhIpQcMO5SfdY51suPqlhquRTIyWnut+laWzca9A1rfj1ODW08jjvRk5zclGNhC6dIOU/2YRr52QIV6uDla4Fhk6P0cspyt4RKJPeazjhQ6iYw3QSgoPrxpcuGhwVKQfm4G3F0LHmuSNxJeMlP5KBACT6z/yyxpLONblrmLX7eoLEpuvuW2Oh2i3ap9NZm29p6f9iS24z91DKqbJoq7kI6D0QWQNPo+V2XvrcJ2LUbHiAysLzxcOoAELuDYqzkhEFTcC00vYHYbx22uHQ6BDmdHWD+pQxLsZI6cbRkKlrGanKXDJ4SzyWgIB6k729GDp7XA91FpBRQ8DVXeGIkzLHnSkYSHD9p5pwtBl9u2xxxmTVfriCDlmfeAKISOVNCWvI5GIaIWc2K2cokE/1ybo/ZCzCl4U7cuKS7mvFaDzcYhTfLfeOpS7DE/ikpG9at1Dx3XVlUKguskbKNYeiqvYctwxQwbzhcfZkDX3cFoZoYlZIT/QeRf+aUDCxDFdf9+ToFntaakEVsg3JJw4iplscbOyzxL9TErqGuEKDKYF6o0dIpco06a49C9ICOQUGxoMnhYHLfi8bo6g8egxWERk8Y/up9F2pnVdz3++jFAb9ODuWvbdOMepygUyIk8Cg6/AV2eBHR1gCvAd+x+b8mSqvnV9UqtQdzsDj5hZNzTERgSfEf9ZBBfwgRChD1Q+f2G0l4ZpYqoeOJVbH2BRubZN0peLfkv0FpydayYg/fxdafPq1DIprP3nDrn9BkPFRGZpmCmpJAF8SoPl+fX/w0a0FySW2ygWxrNwdR5EMNSFBAp/nLMaDZSQ9LxsskgiypkMpLvDt9VrzJs/hdSKv+JDHPuuUf17BWFwGTNg4OImamKEVYWbGXhAmf1NCnsCN41nuUrhYrKpucVerzYUBqwaAj83+W90UNh5jmz5EeZdkMYRE83ij1ClWzQVtwp08wGjX/MqZTVmF0gaJqoRa0BeBtBJGifEUnxfyN1RroM9g0Y7T7CNETwPkBCyMB/jQsFu2OaEzhToBg/0rIOScmuhRD4JSjsbgs5ynZm5ci1JUsbqq8HcBxO0HfnjxZ6wPQlT9hkfH6Ymva1n/XOhArB4l7GItVzvLg1ZImgTf8Nq0sn/nKEARVhSwkgwd791oZ/F9SBGbhU8+wk+x7OeZGIh3LJPVmGzbAPcfcK9WznajPvroiXT5l4MaqOd451yCOthi4BgBVadd8Bq9tNXhQ8AflUWHOUOm3EL90V/ARPFWu96Y325Dw8VwLh0751C5anEYmI7toxBwl0AmAaL9cHFFgLzVr93+8giYfgmcTywXw4tjZJAnIZmlhtBfikAyN9olQpFP7XFAY0KtYOHAeXX+hZPDdGixhaj/0LEHFIs3dNAUFLt+iup+iiDooquvX2ZKOU66j621MQhvML9qNo1EwtmzLyTG3UnSY0YHuifvbqdH+JE9OJAdFA4p7LhTPU3eB1QpXdNx3F/1Epx3EiC+o/uv0aTDj/zmppkPhcok7sxEn2cXkdkaauokaxz57ewlC5ErqzL0KhM5xYcsSM/u4Mi5/9errCGJfqoB9F4NVE12yj21mXv+kqYuakLcn2IE435bDkyf+20ChP3xTyIo5WP1elNQF+AsvZeqvNvthSGhiQfOxwMX1eklBCS0fSsfW77xT67D3G84cpu1tTZegdVEcpoy2fk97NbhNK+HIYH7Lp+qHyBXkdu0cRr6/lZScyUKnKmasdWGOXVgvRUNFOYzKebjyunfFKUJUmzZe9cKFOeZsrimtMzjD9DwAfZlWvP81onaxp9KBtAz4GLOayVxsunKhTQ1I5l3WOPSXPC6PLch/lvPEspFFyEck2FZSjtf1q61get5Iqlr8iNfaerYd0HIWFUTXxT+wnfcetSWnPl305yT6mebfUlCbDd0qH4bOUrzeLY7uH1271UexWAmweoRe6SQCfKdIPU1ufrhfohkIZ6YK0LR6PcJx0oXvtBHC6IiLEmW0c00qbvgRRr6esEUSt07playEseUbdyFSCxGdWdQBTQIvNT0hmUlw93+UwOqT9uMAe7cAkWtXJJVU4egAAdQxmf8BAFCwcLGxxGf7AgAAAAAEWVo=|base64 -d|unxz>e.svg;echo \<img src=e.svg height=$1\>>e.htm;firefox e.htm
$1
输入参数决定。
<canvas id=c><script>_='function e,t,n){c.savtranslate,trotatn?0:.42)}v=docuEleById("c"c=vContex"2d"scalw=(v.width=v.height=promp))/12,w76,1arc(56--114.2,6,66-13,6.- 2,1 11.5)c.clearRec2restor-7mov-71lin6,.5,strokt( .5--e(0,);1,ment.geteTo(';for(Y in $=' ')with(_.split($[Y]))_=join(pop());eval(_)</script>
该代码使用JSCrush压缩。
这是未压缩的代码:
<canvas id=c>
<script>
v=document.getElementById('c');
c=v.getContext('2d');
function r(){c.rotate(0.42)}
function t(x,y){c.save();c.translate(x,y)}
c.scale(w=(v.width=v.height=prompt())/12,w);
t(7.5,6);
c.arc(0,0,5.5,0,6);
c.stroke();
c.moveTo(-7.5,-1);c.lineTo(6,-1);
c.moveTo(-7.5,1);c.lineTo(6,1);
c.stroke();
c.clearRect(4.2,0,6,6);
t(0,6);r();
c.clearRect(0,-11,3,6.2);
c.restore();
t(-7.5,-0.5);r();
c.clearRect(-1,-2,1,2);
c.restore();
t(-7.5,1.5);r();
c.clearRect(-1,-1.5,1,1.5)
</script>
<canvas>
标记是JavaScript ... HTML5通常用于不编写HTML / CSS / JS。并不是人们不理解它,程序员经常是懒惰的(至少我是)。您的评论似乎有些刺耳。
7 7翻译 / l {lineto} def / o {0 0} def o 6 44.85 165.52弧 -7.08 1.5升 -7.5 .5升 o 6 175.22 184.74弧 -7.08 -.5升 -7.5 -1.5公升 o 6 194.48 309.67弧 o 5320 197.46 arcn 1.87 -1.5公升 2.29 -.5升 o 5 185.74 174.26 arcn 2.7 .5升 3.12 1.5升 o 5 162.54 40 arcn 封闭路径填充
这只是通过根据我在GeoGebra的帮助下计算出的坐标附加路径元素来定义轮廓,然后填充轮廓。
通过添加lineto
(/l{lineto}def
)快捷方式和圆的原点(),我节省了一些字符/o{0 0}def
。
要指定其他大小,请在第一个空白行之后添加一个格式的命令。height width scale
单独运行时,这会在默认页面大小的页面的左下角绘制欧元符号。只需将其另存为anything.ps
并使用文档查看器查看即可。
这是默认大小的图像,栅格化为每英寸90像素多一点:
4倍尺寸时:
您也可以下载原始文件以自己欣赏。
感谢AsksAnyway提供了功能(例如$c = print; $c('Hello world!');
)的便捷快捷键。
<?php header('Content-type:image/png');$h=$_GET['h'];$i=imagecreatetruecolor($h*1.1,$h*1.1);$c=imagecolorallocate;$b=$c($i,0,0,0);$w=$c($i,255,255,255);imagefill($i,0,0,$w);$l=$h*.7;$t=$h*.55;$u=$h/12;$e=imagefilledellipse;$e($i,$l,$t,$h,$h,$b);$e($i,$l,$t,$h*5/6,$h*5/6,$w);$f=imagefilledpolygon;$f($i,array($l+$u*5,$t+$u*1.5,$l-$u*7.5,$t+$u*1.5,$l-$u*7.125,$t+$u*0.5,$l+$u*4,$t+$u*.5,$l+$u*4,$t-$u*.5,$l-$u*7.5,$t-$u*.5,$l-$u*7.125,$t-$u*1.5,$l+$u*5,$t-$u*1.5),8,$b);$f($i,array($l+$u*4.24,$t-$u*4.24,$l+$u*1.84,$t+$u*1.5,$l+$u*3.84,$t+$u*3.26,$l+$u*3.84,$t+$u*4.62,$h*2,$t,),5,$w);imagepng($i);
file.php?h=200
从浏览器致电以查看图像
坐标基于GIMP执行的测量
<?php
header('Content-type: image/png');
$h = $_GET['h'];
$i = imagecreatetruecolor($h * 1.1,$h * 1.1);
$c = imagecolorallocate;
# black
$b = $c($i,0,0,0);
# white
$w = $c($i,255,255,255);
imagefill($i,0,0,$w);
$l = $h * .7; # distance between left and center of the circle
$t = $h * .55; # distance between top and center of the circle
# one "unit", as defined by the specs
$u = $h / 12;
$e = imagefilledellipse;
# disk is black
$e($i, $l, $t, $h, $h, $b);
# inner disk is white
$e($i, $l, $t, $h * (5 / 6), $h * (5 / 6), $w);
$f = imagefilledpolygon;
# draw 2 bars in black
$f($i, array(
# bottom bar
$l + $u * 5, $t + ($u * 1.5), # bottom right
$l-$u * 7.5, $t + ($u * 1.5), # bottom left
$l-$u * 7.125, $t + ($u * 0.5), # top left
$l + $u * 4, $t + ($u * 0.5), # top right
# top bar
$l + $u * 4, $t - ($u * 0.5), # bottom right
$l-$u * 7.5, $t - ($u * 0.5), # bottom left
$l-$u * 7.125, $t - ($u * 1.5), # top left
$l + $u * 5, $t - ($u * 1.5) # top right
), 8, $b);
# hide right parts of bars and circle by drawing white
$f($i, array(
$l + $u * 6 * (212 / 300), $t - ($u * 6 * (212 / 300)), # right of the disk
$l + $u * 6 * (92 / 300), $t + ($u * 6 * (74 / 300)), # left = bottom right of bottom bar
$l + $u * 6 * (191 / 300), $t + ($u * 6 * (163 / 300)), # bottom of the circle
$l + $u * 6 * (191 / 300), $t + ($u * 6 * (231 / 300)), # bottom of the circle too
$h * 2, $t, # some point at the right of the image (outside the image)
), 5, $w);
imagepng($i);
base64 -d<<<H4sIADBMaVMAAy1Ru27DMAz8FUJdBVsk9QziLFo8uD/QrUDSOIDTBo1Rt39fUsl0POp0PEr7+88Zfq/L530w87redn2/bVu3cff1fe7JOdeLwsB2Oa7zYDw7A/Ppcp5XJWQO+9v7OsN9/VtOg/m4LMvuRS4ZOA7m1VkseQpBoQZvyXlQQPeA2JpEjVEGURL7EePkLCU3Rqw5Wo4EmLALVgaC9BUrk392OAWt0HUBPHrb+NQq4i5UzigeSU6Zsii5xOYiWLE0BCT1Z89QVKLD2dPEIbdEBasINWIDaiDxG2BjslpBXXTk5CeWFkYa1a2KuS0OMBfJ8RgdKzMr03DRP5Ojy5O8sE2ksdU1g+pcu+SqvILUWddNCBHbCIxvpj/s9ZsO/xXfC57OAQAA|zcat|convert -scale $1 svg:- png:-|xview stdin
这与@minitech的答案相同。但是.svg数据来自此处,该数据要短得多:http : //commons.wikimedia.org/wiki/File : Euro_symbol_black.svg。ImageMagick以请求的比例将矢量数据转换为.png数据,并通过管道传输到xview。
输出为./euro.sh 30
:
输出为./euro.sh 300
:
base64
,这是一个程序,该程序将其反编译为二进制令牌(显然代表svg文件),并用它做更多的工作。
我不知道如何渲染相同的垂直区域并同时保留宽高比,因此我决定选择正确的高度,并由用户决定仅以4:3格式渲染
camera{angle 9 location 102*z right x*8 up y*6 look_at 0}
light_source{99*z color 1}
plane{z,0 pigment{color rgb 1}}
#declare b=difference{box{<-5,-.5,1>,<8,.5,1>}box{-2,2 rotate-67*z translate 9.4*x}}
difference{union{torus{5.5,.5 rotate 90*x}object{b translate y}object{b translate -y}}box{<-3.83,-5,-3>,<-7,0,3>}box{<0,7,3>,<-4,-2,-3>rotate 23*z translate-2.5*x}}
与 povray.exe /RENDER euro.pov -w600 -h800
处理实际上不允许输入命令行参数,因为它是如此专门用于绘图,但是我的函数将参数作为高度进行补偿。坐标是上图的硬编码/近似值,并且整个画布根据输入参数进行缩放以获取任意大小的图形。
void E(int h){scale(h/12,h/12);noFill();strokeWeight(1);arc(7.5,6,11,11,0.7,PI*2-0.7,OPEN);noStroke();fill(0);shearX(-PI/6);rect(3.2,4.5,9,1);rect(4.4,6.5,8,1);shearX(PI/6);fill(255);rect(11,6,9,6);triangle(8.75,6,12.25,6,12.25,0);}
void setup()
{
size(575, 500);
}
void draw()
{
background(255);
E(height);
noLoop();
}
void E(int h)
{
scale(h/12,h/12);
//Main "C"
noFill();
strokeWeight(1);
arc(7.5,6,11,11,0.7,PI*2-0.7,OPEN);
//settings for other shapes
noStroke();
//the two bars
fill(0);
shearX(-PI/6);
rect(3.2,4.5,9,1);
rect(4.4,6.5,8,1);
//bottom cut of "C"
shearX(PI/6);
fill(255);
rect(11,6,9,6);
//top cut of "C"
triangle(8.75,6,12.25,6,12.25,0);
}
1
,而不是OPEN
也改变了255
在background
和fill
调用-1