10.5 A Bouquet of Arrows¶
Let’s draw a bouquet of arrows. Each arrow is identical. The arrowheads are uniformly placed on a circle parallel to the xy-plane. Thus the position of each arrow differs only by the angle θ, 0≤θ<2π, between the arrow and the x-axis on the xy-plane.
Our bouquet is rather special: each arrow has a different color (which won’t be evident here, unfortunately). This is arranged by letting the color of each successive arrow be denoted by θ. In this way, the color of arrows ranges from red to green to violet. Here is a program to draw a bouquet of n arrows.
drawBouquet(n,title) ==}{}
angle := 0.0@DFLOAT The initial angle
sp := createThreeSpace() Create empty space $sp$
- for i in 0..n-1 repeat For each index i, create:
- start := point [0.0@DFLOAT,0.0@DFLOAT,0.0@DFLOAT,angle]
- the point at base of arrow;
- end := point [cos angle, sin angle, 1.0@DFLOAT, angle]
- the point at tip of arrow;
- arrow := makeArrow(start,end) the $i$th arrow
for a in makeArrow(start,end) repeat For each arrow component,
- curve(sp,a) add the component to $sp$
- angle := angle + 2*%pi/n The next angle
makeViewport3D(sp,title) Create the viewport from $sp$
Read the input file.
)read bouquet
A bouquet of a dozen arrows.
drawBouquet(12,”A Dozen Arrows”)