Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Algorithm for drawing an arc

  1. May 6, 2013 #1
    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 (Text):
    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 (Text):
    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 (Text):
     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 (Text):
    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....
  2. jcsd
  3. May 6, 2013 #2
    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.
  4. May 6, 2013 #3
    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?
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook