在渐近线中加载具有精确缩放比例的位图图像的正确方法是什么?

在渐近线中加载具有精确缩放比例的位图图像的正确方法是什么?

我正在尝试加载一个 100x100 像素的正方形位图图像,以便其下边位于 (0,0)--(1,0) 段上。我使用命令

label(graphic("black","width=1cm"),(.5,.5)); 

结果是

在此处输入图片描述

当我将宽度改为 2cm 时,我得到了一个比单位正方形略小的正方形。

在此处输入图片描述

我浏览了所有可用的示例,但不知道我做错了什么。任何帮助都欢迎。只是补充一点。虽然 Tikz 文档的范围令人难以置信,但 Asymptote 的文档却采用了相反的方法。在我看来,这会让人们对这款出色的软件望而却步。

生成图像的代码是

import graph; 

size(7cm,0);
settings.tex="pdflatex";

/* draw grid of horizontal/vertical lines */
void ddrawgrid(real xmin = -5, real xmax =5, real ymin = -5, real ymax = 5, real f=10) { 
    /* grid intervals */
    pen gridpen  = linewidth(0.7) + gray(.7); 
    real dx = 1., dy = 1.; 
    for(real i = ceil(xmin/dx)*dx; i <= floor(xmax/dx)*dx; i += dx)
      draw((i,ymin)--(i,ymax), gridpen);
    for(real i = ceil(ymin/dy)*dy; i <= floor(ymax/dy)*dy; i += dy)
      draw((xmin,i)--(xmax,i), gridpen);

    /* draws axes; NoZero hides '0' label */ 
    Label laxis; laxis.p = fontsize(f); 
    xaxis(xmin, xmax, Ticks(laxis, Step = 1., Size = 2, NoZero),EndArrow(6), above = true); 
    yaxis(ymin, ymax, Ticks(laxis, Step = 1., Size = 2, NoZero),EndArrow(6), above = true); 
}

int m=3,n=2; 

fill(box((0,0), (m,n)), paleyellow); 
ddrawgrid(xmax=m,  xmin=0, ymax=n, ymin=0); 


label(graphic("black","width=1cm"),(.5,.5)); 

黑色方块在这里 在此处输入图片描述

答案1

需要了解的主要一点是标签不会通过sizeunitsize命令缩放。 例如,我修改了下面的代码,以显示 7 厘米的标签与您绘制的网格的宽度相同。

import graph; 

size(7cm,0);
settings.tex="pdflatex";

/* draw grid of horizontal/vertical lines */
void ddrawgrid(real xmin = -5, real xmax =5, real ymin = -5, real ymax = 5, real f=10) { 
    /* grid intervals */
    pen gridpen  = linewidth(0.7) + gray(.7); 
    real dx = 1., dy = 1.; 
    for(real i = ceil(xmin/dx)*dx; i <= floor(xmax/dx)*dx; i += dx)
      draw((i,ymin)--(i,ymax), gridpen);
    for(real i = ceil(ymin/dy)*dy; i <= floor(ymax/dy)*dy; i += dy)
      draw((xmin,i)--(xmax,i), gridpen);

    /* draws axes; NoZero hides '0' label */ 
    Label laxis; laxis.p = fontsize(f); 
    xaxis(xmin, xmax, Ticks(laxis, Step = 1., Size = 2, NoZero),EndArrow(6), above = true); 
    yaxis(ymin, ymax, Ticks(laxis, Step = 1., Size = 2, NoZero),EndArrow(6), above = true); 
}

label(graphic("black","width=7cm"),(0,0),NE); 
layer();

int m=3,n=2; 

ddrawgrid(xmax=m,  xmin=0, ymax=n, ymin=0); 

在此处输入图片描述

您的size(7cm,0);命令表示整个输出应为 7 厘米宽。因此,当您绘制宽度为 1 厘米的“黑色”标签时,它将约为网格宽度的 1/7。

您可能想研究如何使用unitsize();命令。此命令充当比例因子,这样unitsize(3cm);命令将导致您的每条网格线相距 3 厘米。由于标签不会通过“unitsize”命令缩放,因此您必须定义"width=3cm"“黑色”标签以使其填充您的一个网格方块。

unitsize(3cm);
settings.tex="pdflatex";

label(graphic("black","width=3cm"),(.5,.5)); 
layer();

label(graphic("black","width=1.5cm"),(1.5,1.5)); 
layer();

draw(unitsquare, red);
draw(shift(1,0)*unitsquare, red);
draw(shift(0,1)*unitsquare, red);
draw(shift(1,1)*unitsquare, red);

在此处输入图片描述

祝你好运并坚持使用 Asymptote,它确实是一种非常有用的语言!

相关内容