turtle_graphing.py

Created by ferr0fluidmann

Created on January 21, 2020

2.13 KB


from math import *
import kandinsky as k
from turtle import *
#from my_functions import *

def f_function(x):
  return 5*sin(x)

tMin = 0
tMax = 2*pi

def x_function(x):
  return 5*cos(x)
  
def y_function(x):
  return 5*sin(x)

def draw_grid(xmin=-14.4,xmax=14.4,ymin=-10,ymax=10):
  blk=k.color(0,0,0)
  gry=k.color(220, 220, 220)
  y_0=int(ymax*222.0/(ymax-ymin))
  x_0=int(xmin*320.0/(xmin-xmax))
  gridx = int(xmin)
  while gridx <= xmax:
    x=int(319.0*(gridx-xmin)/(xmax-xmin))
    for y in range(222):
      k.set_pixel(x,y,gry)
    gridx+=1
  gridy = int(ymin)
  while gridy <= ymax:
    y=int(221.0*(gridy-ymin)/(ymax-ymin))
    for x in range(320):
      k.set_pixel(x,y,gry)
    gridy+=1
  for x in range(320):
    k.set_pixel(x,y_0,blk)
  for y in range(222):
    k.set_pixel(x_0,y,blk)

def graph(it=1000,f=f_function,xmin=-14.4,xmax=14.4,ymin=-10,ymax=10):
  reset()
  hideturtle()
  speed(10)
  x_map = 320.0/(xmax-xmin)
  y_map = 222.0/(ymax-ymin)
  x_0 = int(x_map*(xmax+xmin)/2.0)
  y_0 = int(y_map*(ymax+ymin)/2.0)
  draw_grid(xmin, xmax, ymin, ymax)
  penup()
  color(0,0,255)
  for x in range(it+1):
    X = xmin+x*(xmax-xmin)/float(it)
    try:
      Y=f(X)
      turtle_x=x_0+int(X*x_map)
      turtle_y=y_0+int(Y*y_map)
      if abs(turtle_x)<=(320.0/2.0) and abs(turtle_y)<=(220.0/2.0):
        goto(turtle_x, turtle_y)
        pendown()
      else:
        penup()
        goto(0,0)
    except:
      Y=0
      penup()

def parametric_graph(it=1000,fx=x_function,fy=y_function,tmax=tMax,tmin=tMin,xmin=-14.4,xmax=14.4,ymin=-10,ymax=10):
  reset()
  hideturtle()
  speed(10)
  x_map = 320/(xmax-xmin)
  y_map = 220/(ymax-ymin)
  x_0 = int(x_map*(xmax+xmin)/2.0)
  y_0 = int(y_map*(ymax+ymin)/2.0)
  draw_grid(xmin,xmax,ymin,ymax)
  penup()
  color(0,0,255)
  for t in range(it+1):
    T = tmin+t*(tmax-tmin)/float(it)
    try:
      X=fx(T)
      Y=fy(T)
      turtle_x=x_0+int(X*x_map)
      turtle_y=y_0+int(Y*y_map)
      if abs(turtle_x)<=(320.0/2.0) and abs(turtle_y)<=(220.0/2.0):
        goto(turtle_x, turtle_y)
        pendown()
      else:
        penup()
        goto(0,0)
    except:
      X=0
      Y=0
      penup()