What is the Purpose of the Arc Function in Python's Turtle Graphics?

  • Context: Python 
  • Thread starter Thread starter mrcleanhands
  • Start date Start date
  • Tags Tags
    Algorithm Arc Drawing
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
2 replies · 4K views
mrcleanhands
Hi,
I'm working through thinkpython and there is an exercise which requires drawing flowers and arcs. I'm having some trouble understanding the arc function.

Code:
def arc(t, r, angle):
    """Draws an arc with the given radius and angle.

    t: Turtle
    r: radius
    angle: angle subtended by the arc, in degrees
    """
    arc_length = 2 * math.pi * r * abs(angle) / 360
    n = int(arc_length / 4) + 1 
    step_length = arc_length / n
    step_angle = float(angle) / n

    # making a slight left turn before starting reduces
    # the error caused by the linear approximation of the arc
    lt(t, step_angle/2)
    polyline(t, n, step_length, step_angle)
    rt(t, step_angle/2)

Here's the polyline code called from the above function:
Code:
def polyline(t, n, length, angle):
    """Draws n line segments.

    t: Turtle object
    n: number of line segments
    length: length of each segment
    angle: degrees between segments
    """
    for i in range(n):
        fd(t, length)
        lt(t, angle)
I'm unsure about this part:
Code:
 n = int(arc_length / 4) + 1
I'm guessing the purpose of n is to divide up the movements into separate iterations. How come it's set to arc_length / 4 + 1
Code:
step_angle = float(angle) / n
I'm guessing this is dividing up the total angle subtended by the arc into little bits which it gradually carves out...
 
Physics news on Phys.org
It looks like the value for n (number of arc segments) is fairly arbitrary, and you're right, the step angle is what an arc segment subtends for a given segment of the total arc.
 
What are the units of 'r' ?

I think those are the same units of the dividing 4

So, it seems to me that they are choosing to draw an arc as small straight lines, except when the arc is smaller than 4, in which the division yields a number smaller than 1 and the int() operation yields zero, which leaves you back with the + 1

In other words, they are choosing the "small segments" to be approx 4 units long, or so, every time.

make sense? or am I missing something?