抱歉,如果这是一个重复的问题,但我该如何绘制一个不规律的用渐近线画十一边形?我是新手,我知道如何画一个规则的,但不知道如何画一个不规则的。
[asy]
size(9cm);
pair cis(real magni, real argu) { return (magni*cos(argu*pi/180),magni*sin(argu*pi/180)); }
for(int b=1; b<2; b+=1){
for(int a=6; a<7; a+=1){
int n=a+5*b;
pair ctr=(2.5*a,-2.5*b);
real r=1; pair offs=(0,0);
if(n==3) {r=2/3; offs=(0,-1/3);}
for(int i=1; i<2*n; i+=2){
draw(ctr+cis(r/cos(pi/n),270+(i-2)*180/n)+offs---ctr+cis(r/cos(pi/n),270+i*180/n)+offs,blue);
};
};
};
[/asy]
这是我的正十一边形代码,但我不知道如何绘制不规则十一边形。谢谢!
答案1
相关问题可能是如何绘制周长相同的随机简单封闭平滑曲线?
使用 asymptote 和hull_pi.asy
包,很容易得到随机点并创建相关的凸多边形。你可以hull_pi.asy
在以下地址找到(非官方包)https://github.com/pivaldi/asymptote-packages/blob/master/hull_pi.asy
请找到可能的解决方案
import hull_pi;
size(10cm);
// to have a different picture at each launch
srand(seconds());
pair[] cloud;
int nbpt=11;
path poly_point(pair [] a)
{
guide g;
for (int i; i<size(a);++i)
g=g--a[i];
return g--cycle;
}
// Generate a first set of random points.
for (int i=0; i < nbpt; ++i)
cloud.push((10*unitrand(),10*unitrand()));
int l=size(hull(cloud));
while (l<11)
{
cloud.push((10*unitrand(),10*unitrand()));
pair[] phull=hull(cloud);
l=size(phull);
}
pair[] phull=hull(cloud);
draw(poly_point(phull),1bp+blue);
dot(phull,red);
结果