2008年8月25日星期一

Asmyptote study 5


 1 import graph;
2 size(5cm, 0);
3
4 currentpen = linewidth(.8bp);
5
6 real f(real a) { return a^2; }
7
8 pair[] pp = { (-1,f(-1)), (0,f(0)), (1,f(1))};
9
10 // dotfactor = 7; // 定义 dot 大小,只在未定义 currentpen 时有效
11 dot(pp[1], UnFill); // 标记点 pp[1],空心点
12
13 path g = graph(pp, operator ..); // 将 pair[] pp 用 .. 连接
14 draw(g);
15
16 pair p=dir(g, 1); // path g 第 1 点(从0计数)处向量
17 draw("dir(g, 1)", pp[1] -- pp[1]+p, red, Arrow); // 画出上面的向量
18
19 arrow("path g", pp[0], NE, .8cm, blue); // 指示箭头
20 arrow("pair p[1]", pp[1], N, .8cm, blue);

2008年8月20日星期三

show perl rand() with Asymptote

1 #! /usr/bin/perl
 2 use warnings;
3 use strict;
4
5 =comment
6
7 用 Asymptote 来观察 perl 中 rand() 函数的随机性。
8 需要安装配置好 Asymptote
9
10 从观察结果看,还是令人满意的,分布比较均匀
11
12 =cut
13
14 open(TT, '>', '__t.asy') or die $!;
15 print TT 'size(10cm, 0);', "\n\n";
16
17 for (1 .. 1000) {
18 my $x = sprintf("%.2f", rand(200));
19 my $y = sprintf("%.2f", rand(200));
20
21 print TT "dot(($x, $y));\n";
22 }
23
24 print TT 'draw(box((0,0), (200,200)));', "\n";
25 close TT;
26
27 system('asy __t.asy');

2008年8月10日星期日

Asmyptote study 4 - midpoint

三种计算线段中点的方法,和另一种计算 pair 的方法。

1 size(4cm,0);
2 currentpen=linewidth(1bp);
3 pen dpen=linewidth(3bp)+red;
4
5 pair A, B, C;
6 A=(0,0); B=(1,0); C=(0,1);
7 draw(A--B--C--cycle);
8
9 // 第一种
10 draw (midpoint(A--B) -- C);
11 // 第二种
12 draw (B+0.5*(C-B) -- A);
13 // 第三种
14 draw (interp(A,C,0.5) -- B);
15
16 // 另一种计算 pair 的方法
17 dot(A/3 + B/3 + C/3, dpen);
18
19 dot((A--B--C), dpen);
20
21 label("A", A, SW);
22 label("B", B, SE);
23 label("C", C, E);

2008年8月5日星期二

Asmyptote study 3

Day day up ^^
 1 
2 real r=100;
3 real x=65*pi/180;
4 pair O=(0,0), D=(250,0), B=(r,0);
5
6 // 三角函数的参数是弧度值
7 pair A=(r*cos(x), r*sin(x)), C=(r*cos(x), 0);
8
9 currentpen = linewidth(1bp)+red;
10
11 draw(circle(O,r), linewidth(1.5bp)+red);
12 draw(O--A--D--cycle);
13 draw(A--C--B--cycle);
14
15 // 画圆弧的函数 arc() 的参数是 度数值
16 draw(arc(O,10,0,x*180/pi));
17
18 label("$x$", arc(O,10,0,x*180/pi));
19 label("1", A--O, NW);
20 label("C", C, S);
21 label("B", B, SW);
22 label("D", D, S);
23 label("A", A, NE);
24 label("O", O, SW);

2008年8月1日星期五

set hotkey in GNU/Linux

可以指定功能键来实现的, 可以这样试一试
#as root

1. 复制键盘转换表,将功能键的定义复制一份
cd /lib/kbd/keymaps/i386
dumpkeys --funcs-only>keyfile

2. 编辑此文件
vi keyfile
在vi里,设置要定义的功能键的函数,如:
...
string F5 = "/sbin/shutdown -h now\012" #\012是必须的
...
#可指定多个功能键

3. 加载这个键盘影射文件keyfile
loadkeys keyfile

4. 为了每次启动就可以使用这些功能键,可以在/etc/rc.local中加入:
loadkeys /lib/kdb/mapkeys/i386/keyfile

测试环境: redhat 9 GNU/Linux , 此方法使用文本方式