简体   繁体   中英

Python: draw tangent graph using math & turtle libraries

I was stuck on this task for several days. Although, the solution should be simple. I apply math and turtle libraries for drawing 3 graphs: sine, cosine and tangent with amplitude 200. The problem is I cant build the tangent graph as It should be drawn. This is what I should do:

所需图

This is what I got:

实际结果

As you see, my turtle goes up and doesn't come back anymore. Pls, don't suggest me to use numpy. It's out of my task. Thank you for advance!

import math
import turtle

ws = turtle.Screen()
ws.bgcolor("white")
t = turtle.Turtle()
for i in [(0,250), (0,0), (0,-250), (0,0), (400,0), (0,0)]:
    t.goto(i, None)
    t.write(i, font=("Arial", 12))

t.color("red")

for angle in range(360):
    y = math.sin(math.radians(angle))        
    t.goto(angle, y * 200)

t.penup()
t.setpos(0,200)
t.goto(0,200)
t.pendown()
t.color("blue")

for angle in range(360):
    y = math.cos(math.radians(angle))       
    t.goto(angle, y * 200)

t.penup()
t.setpos(0,0)
t.goto(0,0)
t.pendown()
t.color("green")

for angle in range(360):
    y = math.tan(math.radians(angle))
    t.goto(angle, y * 200)

ws.exitonclick()

To show that it should work, below is my minimalist implementation of plotting sine, cosine and tangent using turtle graphics:

import math
from turtle import Turtle, Screen

RESOLUTION = 0.1

def plot(x_points, y_points):
    for i, y in enumerate(y_points):
        if abs(y) <= 2.0:
            yertle.goto(x_points[i], y)
            yertle.pendown()
        else:
            yertle.penup()

    yertle.penup()

screen = Screen()
screen.setworldcoordinates(0, -1.5, 2 * math.pi / RESOLUTION, 1.5)

yertle = Turtle()
yertle.penup()

x = range(int(2 * math.pi / RESOLUTION))

yertle.color("blue")
plot(x, (math.cos(n * RESOLUTION) for n in x))

yertle.color("red")
plot(x, (math.sin(n * RESOLUTION) for n in x))

yertle.color("dark green")
plot(x, (math.tan(n * RESOLUTION) for n in x))

screen.exitonclick()

OUTPUT

在此处输入图片说明

My guess is you're not waiting long enough for tangent to plot, ie it's slowly plotting lots of points off the window and will eventually reappear on-screen. My code works around that issue.

try about this. Near to work for me, no time to get better:

for angle in range(360): y=0

y = math.tan(math.radians(angle))
if y<1 and y>-1:
    t.goto(angle, y * 200)

With asipmtotas

for angle in range(360):
    t.penup()
    y = math.tan(math.radians(angle))

    if y<1 and y>-1:
        t.pendown()
        t.goto(angle, y * 200)
    else:
        t.penup()
        #t.pendown()
        t.goto(angle, 200)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM