Draw nested squares to create pursuit curves. In case you’re
wondering, pursuit curves originate from a calculus problem where one
point is in pursuit of another. But don’t worry, the math used in this
assignment will not stray from essential geometric skills, and we’ll
provide a reference to guide you in the calculations. In essence, you’ll
start by drawing a single square of 1 color, then move slightly and turn
inwards by an angle offset, and finally begin drawing another square with a
smaller side length. We note that this is tougher than the first milestone
and very different in the approach because you’ll start with the largest
square and work inwards as each square gets smaller.
To help you get started, here’s the pseudocode for the algorithm:
establish variables for “side length” and “length offset percent”
loop until the length is smaller than 15:
change the turtle color to a new random color
draw a square
calculate the length offset, angle offset, and new side length*
set up for the next square*
Using the above pseudocode, you’ll have to use your knowledge of for and while loops, random
colors, and turtle movement to complete each step. Note that the “length offset percent” represents
the percent of the current side length you’ll move to start drawing the next square. Crucially, we
placed “*” next to denote the two trickiest steps in the algorithms. These steps require precise
geometry and adjustments to get the pursuit curves visual correct. On the next page, we lay out the
precise math that you’ll need to calculate the length offset and new side length as well as set up for
the next square.
Now, we’ll focus on the two tricky steps mentioned above. Below, you’ll see the beginning to the
visual you’ll create (at left) and a zoomed in version focusing on the math we need to go from one
step to the next.
Above, we see several variables. In green, we have the old side length. In red, we have the new side
length, and in blue, we have the length offset, both of which we’ll need to calculate in code. Lastly,
in purple, we have the old side length minus the length offset. We also have noted the angle offset as θ.
To calculate the new side length and length offset, we need to perform the following steps:
1. To calculate the length offset, we multiple the old side length by the “length offset percent”
variable. As mentioned above, the length offset percent can be thought of the percent of the
old side length that will be the length offset. For example, if “length offset perfect” = 0.10
and the old side length is 100, then the length offset should be 10.
2. To calculate the offset angle θ, we’ll need to use a trigonometry functions called arctangent,
which helps to calculate a triangle angle given two side lengths. To find θ, we can perform
the following math:
To do this, you’ll want to use the math.atan(x) function. Important note: the output of the
atan (or arctan) function will be in radians. This is another way to represent degrees, and
we’ll show you how to convert back to degrees in step 4.
3. To calculate the new side length, we’ll need to use another trigonometry function called
cosine. We can find the new side length
To do this, you’ll want to use the math.cos(x) function, where x is an angle in radians.
There is another way to do this using math.sin(x), and either is acceptable.
4. To set up for the next square, you’ll need to move your turtle forward by the offset length
and then turn left by the offset angle. However, as mentioned in step (2), we need to convert
our angle into degrees to turn with turtle. To do that you can do angle_in_degrees = (θ *
180 / math.pi).