Asymptote 中 tube 的“transform”参数

Asymptote 中 tube 的“transform”参数

来自文档管子

表面管(路径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。

相关内容