ED_LRR/docs_mdbook/src/range.asy

47 lines
994 B
Plaintext

import graph;
import stats;
size(500);
srand(10);
struct Star {
pair pos;
real mult;
}
real range = 48.0;
int n_stars=1000;
Star[] stars=new Star[n_stars];
for(int i=0; i < n_stars; ++i) {
Star s=new Star;
s.pos=(Gaussrand()*range*2,Gaussrand()*range*2);
s.mult=1.0;
if (unitrand()<0.2) {
s.mult=1.5;
} else {
if (unitrand()<0.1) {
s.mult=4.0;
}
}
stars[i]=s;
}
Star origin=new Star;
origin.pos=(0,0);
origin.mult=1.0;
draw(circle(origin.pos,range*origin.mult),white);
draw(circle(origin.pos,range),white+dashed);
draw(circle(origin.pos,range*2),white+dashed);
draw(circle(origin.pos,range*4),white+dashed);
fill(circle(origin.pos,2),red);
for (Star s: stars) {
if (length(s.pos-origin.pos)<(range*origin.mult)) {
draw(s.pos--origin.pos,white+dashed);
fill(circle(s.pos,s.mult),green);
} else {
fill(circle(s.pos,s.mult),white);
}
};