conics.py

Created by ferr0fluidmann

Created on April 21, 2018

1.46 KB

Graphs circles (ellipses, hyperbolas, and parabolas in progress).


from math import *
from kandinsky import *
def circle_val(x=0,xc=0.0,yc=0.0,r=1.0):
  y1 = yc+sqrt(-((x-xc)**2-r**2))
  y2 = yc-sqrt(-((x-xc)**2-r**2))
  return y1, y2
def circle(xc=0.0,yc=0.0,r=1.0):
  draw_string("(x-"+str(xc)+")^2 + "+"(y-"+str(yc)+")^2 = "+str(r)+"^2",0,0)
  sr = 111
  col = color(0, 0, 255)
  blk = color(0, 0, 0)
  gray = color(200, 200, 200)
  interval = 111.0/r
  xz = int(160.0-xc*interval)
  yz = int(111.0+yc*interval)
  xgrid = xz+interval
  while xgrid <= 320:
    y = 0
    while y < 222:
      set_pixel(int(xgrid),y,gray)
      y+=1
    xgrid+=interval
  xgrid = xz-interval
  while xgrid >= 0:
    y = 0
    while y < 222:
      set_pixel(int(xgrid),y,gray)
      y+=1
    xgrid-=interval
  ygrid = yz+interval
  while ygrid <= 222:
    x = 0
    while x < 320:
      set_pixel(x,int(ygrid),gray)
      x+=1
    ygrid+=interval
  ygrid = yz-interval
  while ygrid >= 0:
    x = 0
    while x < 320:
      set_pixel(x,int(ygrid),gray)
      x+=1
    ygrid-=interval
  y = 0
  for y in range(222):
    set_pixel(xz,y,blk)
    y+=1
  x = 0
  for x in range(320):
    set_pixel(x,yz,blk)
  x = 160-sr
  while x<=160+sr:
    y1 = 111+sqrt(-((x-160)**2-sr**2))
    y2 = 111-sqrt(-((x-160)**2-sr**2))
    set_pixel(x,int(y1),col)
    set_pixel(x,int(y2),col)
    x+=1
  y = 111-sr
  while y<=111+sr:
    x1 = 160+sqrt(-((y-111)**2-sr**2))
    x2 = 160-sqrt(-((y-111)**2-sr**2))
    set_pixel(int(x1),y,col)
    set_pixel(int(x2),y,col)
    y+=1