我正在尝试用渐近线绘制一些图形,这对我来说很新奇,每一步都是痛苦的反复尝试。我尤其需要arc
在 3D 中使用命令:
path3 arc(triple c, real r, real theta1, real phi1, real theta2, real phi2,
triple normal=O);
但我不知道如何选择角度。我读了文档,但对我没有帮助。有什么好的教程吗?
答案1
据我了解,弧线主要有两种不同的定义方式:
- 路径3圆弧=圆弧(圆心,起点,终点)
- 路径 3 圆弧 = 圆弧 (中心,theta1,phi1,theta2,phi2)
在第一种情况下,起点和终点通过笛卡尔坐标定义,而在第二种情况下,它们通过球面坐标。我认为当你知道绘制圆弧的平面的法线时,还有其他方法。看看下面的代码和相应的图。
// command line compilation: asy -f pdf MyFig
if(!settings.multipleView) settings.batchView=false;
import solids;
import three;
settings.render=0;
settings.prc=false;
currentprojection=perspective(1,1,1);
size(8cm);
// distances: radius and length
real r=.4, ar=.5;
// sphere to visualize the various arcs
revolution S=sphere(O,r);
draw(S.silhouette(),black+linewidth(.5pt));
draw(S,black+linewidth(.5pt));
// axes
draw((0,0,0)--(0,ar,0),linewidth(0.5pt),Arrow3);
draw((0,0,0)--(0,0,ar),linewidth(0.5pt),Arrow3);
draw((0,0,0)--(ar,0,0),linewidth(0.5pt),Arrow3);
///////////////////////////////////////////////////////////
/////////////////////// blue arc //////////////////////////
///////////////////////////////////////////////////////////
// starting point in spherical coordinates
real theta=0, phi=0;
real x1=r*sin(theta)*cos(phi), y1=r*sin(theta)*sin(phi), z1=r*cos(theta);
// end point
real theta=pi/2, phi=0;
real x2=r*sin(theta)*cos(phi), y2=r*sin(theta)*sin(phi), z2=r*cos(theta);
draw(arc((0,0,0),(x1,y1,z1),(x2,y2,z2)),blue+linewidth(1pt),ArcArrow3);
///////////////////////////////////////////////////////////
////////////////////// green arc //////////////////////////
///////////////////////////////////////////////////////////
// starting point
real theta=0, phi=3*pi/4;
real x1=r*sin(theta)*cos(phi),y1=r*sin(theta)*sin(phi),z1=r*cos(theta);
// end point
real theta=pi/3, phi=3*pi/4;
real x2=r*sin(theta)*cos(phi), y2=r*sin(theta)*sin(phi),z2=r*cos(theta);
draw(arc((0,0,0),(x1,y1,z1),(x2,y2,z2)),green+linewidth(1pt),ArcArrow3);
///////////////////////////////////////////////////////////
/////////////////// other examples ////////////////////////
///////////////////////////////////////////////////////////
// arc(center,starting point,end point))
draw(arc((0,0,0),(0,r,0),(0,r*cos(pi/4),r*sin(pi/4))),red+linewidth(1pt),ArcArrow3);
// arc(center,radius,theta1,phi1,theta2,phi2)
// almost like the blue arc but with phi=10 degrees and different ends
draw(arc(O,r,20,10,70,10),black+linewidth(1pt),ArcArrow3);
// almost like the black arc but with phi=30 degrees
draw(arc(O,r,90,30,90,90),pink+linewidth(1pt),ArcArrow3);