来自文档管子:
表面管(路径3 g,彩色路径部分,变换T(真实)=新变换(真实t){返回身份(;},真实角=1,真实relstep=0);
在 relpoint(g,t) 应用变换 T(t) 后,沿 g 绘制一个具有横截面的管。
但是,当我运行此代码时:
import tube;
import graph3;
size(5cm,0);
currentprojection = orthographic(4,4,14);
triple f(real x){
return (x, x*x, 0);
}
path3 p = graph(f, -1, 1, operator ..);
transform T(real t){
return scale(t*(1-t)/500);
}
draw(tube(p, unitcircle, T), purple);
draw(shift(relpoint(p,0))*scale3(0.1)*unitsphere, black);
draw(shift(relpoint(p,1))*scale3(0.1)*unitsphere, green);
我得到:
这听起来很奇怪。由于T(0) = T(1) = scale(0)
,我预计路径两端的直径均为 0,但我得到的不是这个relpoint(p,1)
(绿点)。
当我这样做时,似乎我得到了预期的结果:
transform T(real t){
return scale(t*(25-t)/500);
}
这意味着t
从 0 运行到 25 T
。
真的是从 0 到 25吗t
?为什么是 25?我误解了什么?
我正在使用 Asymptote 版本 2.44。
答案1
单个三次贝塞尔线段的参数化范围为 0 到 1,并有 4 个控制点。您的路径是通过在 ngraph=100(在 graph_settings.asy 中)点处对 f 进行采样生成的,这将生成长度为 25 的 path3,参数化范围为 0 到 25。