我正在用 Asymptote 绘制几个参数曲面。当我更改参数(tyMax
在下面的 MWE 中)时,函数的值可能会发生显著变化,因此我必须调整每个参数的轴(xmin,xmax,...,zmax
和)。unitsize
我的目标是自动调整轴。我想到的是简单地使用每个表面的极值f(t.x,t.y)
,但我不知道如何实现这一点。
我怎样才能做到这一点?
MWE(玩tyMax
):
import graph3;
real xmin=-2, xmax=2;
real ymin=-2, ymax=2;
real zmin=-0.5, zmax=0.5;
limits((xmin,ymin,zmin),(xmax,ymax,zmax));
currentprojection=perspective(camera=(1.5,-2,1));
unitsize(2cm,2cm,2cm);
real X(pair t) { return cos(t.x+t.y);}
real Y(pair t) { return sin(t.x)*t.y;}
real Z(pair t) { return t.x**2+t.y;}
triple f(pair t) { return (X(t),Y(t),Z(t));}
real tyMax = 5;
surface s=surface(f,(0.,0),(2,tyMax), 60, 60, Spline);
draw(s,blue);
xaxis3(Label("$x_{n-1}$",MidPoint,align=Y-Z),Bounds(Both,Min),InTicks(Step=1),p=black);
yaxis3(Label("$x_{n}$",MidPoint,align=X-Z),Bounds(Both,Min),InTicks(Step=1),p=black);
zaxis3(Label("$\dot x_{n}$",EndPoint,align=X+Y),Bounds(Both,Min),InTicks(Step=1),p=black);
tyMax=5
对于不tyMax=0.3
改变轴的情况的说明:您会看到它需要调整:虽然第一张图像是“OK”,但第二张图像显然不是。
请注意,此 MWE 中的函数非常简单,但在我的使用中我找不到极值的闭式表达式。
还要注意,这个问题可能简单地改写为“在中找到参数函数的极值Asymptote
”,但我想给出背景,因为可能有更好的解决方案。
编辑orthographic
添加了具有更简单表面的 相同投影问题的图示。
代码:
import graph3;
real xmin=-2, xmax=2;
real ymin=-2, ymax=2;
real zmin=-0.5, zmax=0.5;
limits((xmin,ymin,zmin),(xmax,ymax,zmax));
currentprojection=orthographic(camera=(1.5,-2,2));
unitsize(2cm,2cm,2cm);
real param = 2;
real alpha = 4;
draw(surface((param,param,param)--(param**alpha,2*param,3*param)--(3*param,param,param)--cycle),blue
);
xaxis3(Label("$x$",MidPoint,align=Y-Z),Bounds(Both,Min),InTicks(Step=1),p=black);
yaxis3(Label("$y$",MidPoint,align=X-Z),Bounds(Both,Min),InTicks(Step=1),p=black);
zaxis3(Label("$z$",EndPoint,align=X-Y),Bounds(Both,Min),InTicks(Step=1),p=black);
当 param=1、alpha=1 时:
当 param=2、alpha=4 时:
我想:
- 轴被限制在表面(即,如果你缩小了盒子,你就会开始裁剪表面)
- 盒子的比例始终保持不变,比如说输出应该始终是一个立方体。
答案1
如果s
是surface
(参数或其他),则min(s)
是三元组(xmin, ymin, zmin)
,且max(s)
是相似的。因此,是包含表面(指定为)box(min(s),max(s))
的最小三维框。path3[]