我无法沿顺时针方向绘制圆弧

我无法沿顺时针方向绘制圆弧

我必须使用渐近线中的这个程序来追踪经络。

settings.outformat = "png";
settings.render = 16;
size(6cm,0);
import solids;

currentlight=Headlamp; // inutile car Headlamp est la valeur par défaut

nslice=4*nslice;
revolution boule=sphere(O,1);
draw(surface(boule),lightgrey+white+opacity(.5));
draw((0,0,1)--(0,0,-1),dashed);
dot("$P1$",(0,0,1),N);
dot("$P2$",(0,0,-1),2.2S);
dot("$O$",(0,0,0),SE);
draw(O--(1,0,0),red);
draw(O--(Cos(60),Sin(60),0),red);
triple v1= 0.4(1,0,0), v2 = 0.4(Cos(60),Sin(60),0);
draw(arc(c=O,v1,v2,normal=Z),red,arrow=Arrow3(DefaultHead2,emissive(red)),L=Label("$\varphi$",align=W, position=MidPoint)); 
for (real alpha = 90; alpha<=450; alpha+= 30)
{


     if (alpha==150) draw(arc((0,0,0),(0,0,1), (0,0,-1), (Cos(alpha),Sin(alpha),0)),red);
     if (alpha==330) draw(arc((0,0,0),(0,0,1), (0,0,-1), (Cos(alpha),Sin(alpha),0)),red + dashed);
     if (alpha != 150 && alpha != 330) draw(arc((0,0,0),(0,0,1), (0,0,-1), (Cos(alpha),Sin(alpha),0)),black);
}

但是我无法使用此代码沿顺时针方向绘制圆弧(这是批评点!):

draw(arc(c=O,v1,v2,normal=Z),red,arrow=Arrow3(DefaultHead2,emissive(red)),L=Label("$\varphi$",align=W, position=MidPoint)); 

我试过:

  1. 使用相同的法线(Z)改变 v1 和 v2 的顺序,但这样我得到的角度大于九十度(我需要补充角)
  2. 改变 v1 和 v2 的顺序并取 normal = - Z,但这样渐近线就会无限循环运行。

我不知道为什么。

答案1

我花了一段时间才理解这个问题,因为在我看来,它写得不是很清楚。另一个复杂之处在于你没有提供 MWE,而且似乎坚持在评论中有一个特殊字符:“défaut”。我所做的就是遵循这个很棒的教程,其在第 60 页底部具有所需的语法。与您的代码的显着区别在于,2D 箭头的法线也得到指定,并且它实际上是+Z(而不是-Z)。

\documentclass[border=3.14mm]{standalone}
\usepackage{asypictureB}
\begin{document}
\begin{asypicture}{name=arc}
settings.outformat = "png";
settings.render = 16;
size(6cm,0);
import solids;

currentlight=Headlamp; // inutile car Headlamp est la valeur par defaut

nslice=4*nslice;
revolution boule=sphere(O,1);
draw(surface(boule),lightgrey+white+opacity(.5));
draw((0,0,1)--(0,0,-1),dashed);
dot("$P1$",(0,0,1),N);
dot("$P2$",(0,0,-1),2.2S);
dot("$O$",(0,0,0),SE);
draw(O--(1,0,0),red);
draw(O--(Cos(60),Sin(60),0),red);
triple v1= 0.4*(1,0,0), v2 = 0.4*(Cos(60),Sin(60),0);
//draw(arc(c=O,v1,v2),red,arrow=Arrow3(DefaultHead2,emissive(red)),L=Label("$\varphi$",align=W, position=MidPoint)); 
for (real alpha = 90; alpha<=450; alpha+= 30)
{
     if (alpha==150) draw(arc((0,0,0),(0,0,1), (0,0,-1), (Cos(alpha),Sin(alpha),0)),red);
     if (alpha==330) draw(arc((0,0,0),(0,0,1), (0,0,-1), (Cos(alpha),Sin(alpha),0)),red + dashed);
     if (alpha != 150 && alpha != 330) draw(arc((0,0,0),(0,0,1), (0,0,-1), (Cos(alpha),Sin(alpha),0)),black);
};

draw(arc(c=O, v2, v1, normal=-Z), red, arrow =
Arrow3(TeXHead2(normal=Z), emissive(red)),L=Label("$\varphi$",align=S, position=MidPoint));
\end{asypicture}
\end{document}

在此处输入图片描述

相关内容