如何编写循环来反映路径(渐近线)?

如何编写循环来反映路径(渐近线)?

我试图通过编写循环来缩短包含大量反射的代码:

[asy]
unitsize(1.5 cm);
pair A,B,C;

real alpha=(20);
real beta=(10);
real gamma=(180-alpha-beta);
real rad=(pi/180);

real AC=(3);
real AB=(AC*sin(beta*rad)/sin(gamma*rad));

A=(0,0);
B=(AB*sin(alpha*rad),AB*cos(alpha*rad));
C=(0,AC);
path t=(C--B--A--C);

draw(t);
label("$A$", A,S);
label("$B$", B,W);
label("$C$", C,N);


path reflection1(path t){
t=(reflect(A,B)*t);
draw(t);
pair A=(reflect(A,B)*A);
pair B=(reflect(A,B)*B);
pair C=(reflect(A,B)*C);
return t;
return A;
return B;
return C;}

path reflection2(path t){
path t=(reflect(A,C)*t);
draw(t);
pair A=(reflect(A,C)*A);
pair B=(reflect(A,C)*B);
pair C=(reflect(A,C)*C);
return t;
return A;
return B;
return C;}

path F(path t){
for(int i=0;i<3;++i){
if(i/2==0){
reflection1(t);
}
else{
reflection2(t);
}
}
return t;
}
draw(F(t));

[/asy]

我想要这样的图表

[asy]
unitsize(1.5 cm);
pair A,B,C;

real alpha=(20);
real beta=(10);
real gamma=(180-alpha-beta);
real rad=(pi/180);

real AC=(3);
real AB=(AC*sin(beta*rad)/sin(gamma*rad));

A=(0,0);
B=(AB*sin(alpha*rad),AB*cos(alpha*rad));
C=(0,AC);
path t=(C--B--A--C);
draw(t);
label("$A$", A,S);
label("$B$", B,W);
label("$C$", C,N);


draw(reflect(A,B)*t);
draw(reflect(A,B)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*t);

draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*t);

draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(A,B)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(A,B)*reflect(A,C)*t);
draw(reflect(A,B)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(B,C)*reflect(A,C)*reflect(A,B)*reflect(A,C)*reflect(A,B)*t);


label("$C_n$",(3,1));
label("$A'$",(6,0),S);
label("$B'$",(5.6,1.5));
label("$C'$",(6,3),N);
label("$A_n$",(3,-2.8));
[/asy]

在此处输入图片描述

有人可以帮忙吗?

答案1

我建议采用另一种策略,即在循环内围绕点 Cn 进行旋转:

\documentclass{article}
\usepackage{asymptote}
\begin{document}

\begin{asy}
unitsize(1.5 cm);
pair A,B,C;

real alpha=(20);
real beta=(10);
real gamma=(180-alpha-beta);
real rad=(pi/180);

real AC=(3);
real AB=(AC*sin(beta*rad)/sin(gamma*rad));

A=(0,0);
B=(AB*sin(alpha*rad),AB*cos(alpha*rad));
C=(0,AC);

pair C1=reflect(A,B)*C;
pair Cn=rotate(-2*alpha,A)*C1;
pair An=Cn+(0,-AC);

path t1=(C--B--A--cycle);
path t2=reflect(A,B)*t1;
path t3=reflect(A,C1)*t2;
path[] t4={t1,t2,t3};

filldraw(t4^^reflect(An,Cn)*(t4),green);

path[] t5=rotate(-2*alpha,A)*(t2^^t3);
filldraw(t5,blue);

for(int i=1;i<=8;++i){
  filldraw(rotate(i*alpha,Cn)*t5,red);
}

pair[] arrABC={A,B,C};

arrABC=reflect(An,Cn)*arrABC;

label("$A$", A,S);
label("$B$", B,W);
label("$C$",C,N);
label("$C1$", C1,N);
label("$C_n$", Cn,N);
label("$A_n$", An,S);

label("$A'$", arrABC[0],S);
label("$B'$", arrABC[1],W);
label("$C'$", arrABC[2],N);

\end{asy}

\end{document}

在此处输入图片描述

相关内容