注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

随机过程

http://superware.blog.163.com

 
 
 

日志

 
 

Asymptote 记录 (I)  

2012-10-24 15:53:19|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1、绘图区域控制

      关于画布(canvas)的准确定义可以查看关于 maxima 两种接口,也就是 Gnuplot 接口和 Draw 接口的讨论。在计算机绘图中,关于画布、绘图区(plot area)、曲线区(subplot area)三个概念是很重要的。三者之间的关系是:将绘图区分割为若干个子绘图区。而绘图区则映射到物理的画布上。所以画布是物理区域(由像素数对应),也就是图像不缩放的实际尺寸。而绘图区是逻辑区域,其与画布没有直接的关系。逻辑区域可以看作是实数点集合,也就是二维或三维的空间连续点集合,用户只是在逻辑区域上绘图,至于逻辑区域是怎么映射到物理画布上的用户一般不必清楚。

Asymptote 的 size 函数正是定义物理区的函数。而其他的绘图函数都是在该区域绘图。


Asymptote 的 unitsize 函数则是定义坐标单位比例的函数,同时也直接指坐标单位的大小。比如

  unitsize (4cm, 8cm)

表示横坐标和纵坐标的单位长度之比是:Ux:Uy = 4cm :8cm = 1:2,同时也指定了横、纵坐标单位长度分别为 4cm 和 8cm。显然,由于这里只是指定了坐标单位,所以这里还没有指定物理区域的大小,物理区域的大小要到画图时函数的定义域指定

至于绘图区是怎么映射到物理画布上的可以不了解。

void unitsize(picture pic=currentpicture, real x, real y=x);


When nonzero, these x and y values override the corresponding size parameters
of picture pic.


overload : 重载,指同一类中不同的方法有同一名称,但有不同的参数列表。

override :覆盖,指有继承关系的两个类有相同的方法名称,参数列表可同可不同。


当非零时,其中的 x 和 y 的值覆盖图中相应的坐标 size 参数。


The routine
void size(picture pic=currentpicture, real xsize, real ysize,pair min, pair max);


forces the final picture scaling to map the user coordinates box(min,max) to a
region of width xsize and height ysize (when these parameters are nonzero).
Alternatively, calling the routine


强制最终的图被映射到用户坐标的 box (min,max) 中,


transform fixedscaling(picture pic=currentpicture, pair min,pair max, pen p=nullpen, bool warn=false);
will cause picture pic to use a fixed scaling to map user coordinates in
box(min,max) to the (already specified) picture size, taking account of the
width of pen p. A warning will be issued if the final picture exceeds the
specified size.




2、关于画笔控制


pen  hp = linewidth (0.2bp) + gray (0.8);

Asymptote 中的单位可以是:

pt、bp、mm、cm、inch

1foot = 12 inch.

1pt = 1/72.27 inch.

1bp = 1/72 inch.

1inch = 2.54 cm.

1foot = 30.48 cm.

英制单位:英尺(foot)、英寸(inch)
TeX 中的默认单位为 pt (point),1pt = 1/72.27 inch。
这里 bp (big point 的缩写),是 PostScript 中定义的点大小单位,1bp = 1/72 inch。

关于英尺、英寸的来历:

  英尺在英语里是写作foot的,这个单词的意思是脚。原来,1英尺指的是一个成年男子一只脚的长度。可是,人脚的长度是因人而异的,这样就必须规定一个标准的脚长。这项工作是德国在16世纪完成的。一个星期天的早上,他们把做完礼拜从礼堂走出来的前16名男子留下,将他们左脚的长度加在一起,再除以16,得出了一个平均脚长。这就成为“标准合法英尺”了。

  让我们再来看看英寸的来历。英寸,在荷兰语中是大拇指的意思,它的长度相当于一节大拇指的长度。同样,人的大拇指又是长短不一的,14世纪英国皇帝爱德华二世颁布了一个法令,规定了1英寸的长度。它不是拇指的平均长度,而是从一把大麦穗中选取3颗最长的麦粒排成一行后的长度,作为1英寸的长度。

  在英制长度单位里,“码”的定义就更具体了,它是由英国皇帝亨利一世设置的。大约900年前的一天,亨利一世坐在宝座上,他伸直手臂,翘起大拇指,对大臣们说:“看见没有,从我的鼻子尖到大拇指的最大距离,就以此作为基本长度单位。”从此以后,“码”作为长度单位在英美等一些英语国家一直沿用至今。我们折算以下,一码等于0.9144米。

  所以,有人风趣地说:“这么随便定下来的英制尺寸,是该摒弃了。”


奇怪的是我却不知道中国古代的度、量、衡是怎么定义的,而且似乎也查不到具体的理据。

3、关于数据类型

4、举例

      下面的例子选自《Asymptote 作图指南》,该文可以在http://bbs.ctex.org/forum.php?mod=viewthread&tid=47893
处获得。

1 pen hp = linewidth(0.2bp) + gray(0.8);

2

3 for (int i = 0; i <= 8; ++i)
4 {
5     real x = i*cm;
6     draw ((0,x)--(8cm,x), hp);
7     draw ((x,0)--(x,8cm), hp);
8 }

9

10 pair a = (2cm,1cm), b = (7cm,3cm), c = (3cm,7cm);
11 draw (a--b--c--cycle);

12

13 pair d = 0.5(a+b), e = 0.5(b+c), f = 0.5(c+a);

14

15 pair o = extension (d, rotate (90,d)*b, e, rotate(90,e)*b);

16

17 draw (circle (o, abs(o-a)), red);
18 draw (o--d, blue);
19 draw (o--e, blue);
20 draw (o--f, blue);
21 dot (o, red);

22

23 path rag (pair a, pair b, pair c, real sz = 5bp)
24 {
25     pair d = sz * unit (a-b);
26     pair e = sz * unit (c-b);
27     pair f = d + e;
28     return shift(b) * (d--f--e);
29 }

30

31 draw (rag (b, d, o), blue);
32 draw (rag (b, e, o), blue);
33 draw (rag (c, f, o), blue);

34

35 label ("$A$", a, SW);
36 label ("$B$", b, SE);
37 label ("$C$", c, NW);
38 label ("$D$", d, S);
39 label ("$E$", e, NE);
40 label ("$F$", f, NW);
41 label ("$O$", o, SW);

42

43 label (minipage ("$\triangle ABC$\ $\odot O$", 2.5cm), (8.2cm,5cm), E);

在我测试的过程中,将 43 行
43 label (minipage ("$\triangle ABC$\ $\odot O$", 2.5cm), (8.2cm,5cm), E);
中的最后一个 “E” 写错了,导致最后的结果出错。关于 label 函数的方向参数得小心。
  评论这张
 
阅读(140)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018