我需要绘制如下图所示的图形:
这个想法是先画蓝色矩形,然后将其投影到 XY 平面。我当前的代码粘贴在下面。
import graph3;
import three;
settings.outformat="pdf";
currentprojection=orthographic(1,-2,0.5);
limits((-4,-4,-0.2),(4,4,3.5));
size3(8cm,8cm,4cm);
// Draw axis
xaxis3("$x$",Arrow3);
yaxis3("$y$",Arrow3);
zaxis3("$z$",Arrow3);
// Draw blue rectangle
path3 rect1=(0.5,0.5,2)--(1.5,0.5,2)--(1.5,1.5,2)--(0.5,1.5,2)--cycle;
draw(rect1,blue);
// Construct projection and draw red rectangle
// XYplane is defined in three library
transform3 proj=planeproject(XYplane);
path3 proj=proj*rect1;
draw(proj,red);
编译因错误而终止:
no matching function 'planeproject(triple(pair z))'
有任何想法或指示如何进行吗?
答案1
期望planeproject
的只是平面的法向量。XYplane
是 类型的对象triple(pair)
:它实际上是将 (x,y) 映射到 (x,y,0) 的函数。 您想要的法向量只是Z
。
这是通过替换获得的工作planeproject(XYplane)
代码planeproject(Z)
:
import graph3;
import three;
settings.outformat="pdf";
currentprojection=orthographic(1,-2,0.5);
limits((-4,-4,-0.2),(4,4,3.5));
size3(8cm,8cm,4cm);
// Draw axis
xaxis3("$x$",Arrow3);
yaxis3("$y$",Arrow3);
zaxis3("$z$",Arrow3);
// Draw blue rectangle
path3 rect1=(0.5,0.5,2)--(1.5,0.5,2)--(1.5,1.5,2)--(0.5,1.5,2)--cycle;
draw(rect1,blue);
// Construct projection and draw red rectangle
// XYplane is defined in three library
transform3 proj=planeproject(Z);
path3 proj=proj*rect1;
draw(proj,red);
结果:
另一个一般提示:通常最好settings.outformat="pdf";
在开始导入之前进行更改,因为某些模块会根据设置执行不同的事情。