# This is my Quadratic Formula program and more
import math, pygame
from pygame import *
pygame.init()
font = pygame.font.SysFont("Arial",18)
def mymain():
# global variables being used in other functions
global a, b, c, Vx, Vy, d, x1, x2
# input the a, b, and c vaules by the user
print'What is the coefficient of x^2, a?'
a = raw_input('>>> ')
print'What is the coefficient of x, b?'
b = raw_input('>>> ')
print'What is the constant?'
c = raw_input('>>> ')
# change the input to real values
a = float(a)
b = float(b)
c = float(c)
# discriminant
d = b**2-4*a*c
# vertex of the parabola
Vx = -b/(2*a)
Vy = a*Vx**2+b*Vx+c
print 'The symmetry line is at x = ', Vx
print 'The vertex is at (',Vx,',',Vy,')'
# testing the discriminant
if d < 0:
print 'The solution is imaginary.'
print 'The discriminant is ',d
else:
# evaluate the quadratic formula
x1 = Vx + math.sqrt(d)/(2*a)
x2 = Vx - math.sqrt(d)/(2*a)
x1 = round(x1,2)
x2 = round(x2,2)
# print solution
print "The 'x' intercepts are", x1,"and", x2
GraphEq()
def GraphEq():
# setup a window using the pygame library
width,height = 500, 500
screen = pygame.display.set_mode([width+400,height])
pygame.display.set_caption('Quadratic Graph')
screen.fill([255,255,255])
# graph paper scale in k pixels per grid
k = 10
# draw graph paper
for i in range(width/k):
gridx = k*i
gridy = k*i
pygame.draw.line(screen, (100,50,240), (gridx, 0), (gridx, height), 1)
pygame.draw.line(screen, (100,50,240), (0, gridy), (width, gridy), 1)
# draw the x and y axis on the screen
midx = (width/k)/2
midy = (height/k)/2
pygame.draw.line(screen, (0,0,0), (midx*k,0), (midx*k,height), 3)
pygame.draw.line(screen, (0,0,0), (0,midy*k), (width, midy*k), 3)
# graph the parabola across the width
for i in range (width):
x = (width/2 - i)/float(k)
y = a*x**2+b*x+c
pos1 =[width/2+x*k, height/2-y*k]
# pygame.draw.circle(screen, (255,0,0), pos1, 3)
nx = (width/2 - (i+1))/float(k)
ny = a*nx**2+b*nx+c
pos2 =[width/2+nx*k, height/2-ny*k]
pygame.draw.line(screen, (255,0,0), pos1, pos2, 3)
# displaying the results symmetry line, vertex, and zeros
symline = font.render("The line of symmetry is at x = "+str(Vx),1,(255,0,0))
screen.blit(symline, (width+10, 20))
instruct = font.render("Select 's' to graph the symmetry line.", 1, (200,0,0))
screen.blit(instruct, (width+20, 45))
vertex = font.render("The vertex is at ("+str(Vx)+","+str(Vy)+")",1,(0,255,0))
screen.blit(vertex, (width+10, 75))
instruct = font.render("Select 'v' to plot the vertex point.", 1, (0,200,0))
screen.blit(instruct, (width+20, 100))
if d<0:
xint = font.render("The are no x-intercepts.",1,(0,0,255))
screen.blit(xint, (width+10, 130))
instruct = font.render("The discriminant is "+str(d), 1, (0,0,200))
screen.blit(instruct, (width+20, 155))
else:
xint = font.render("The x-intercepts are at ("+str(x1)+",0) ("+str(x2)+", 0)",1,(0,0,255))
screen.blit(xint, (width+10, 130))
instruct = font.render("Select 'x' to plot the x-intercepts.", 1, (0,0,200))
screen.blit(instruct, (width+20, 155))
instruct = font.render("Select 'n' to show graph another parabola.", 1, (0,0,0))
screen.blit(instruct, (width+10, height-30))
# run an infinite loop to control the window
active = True
while active:
# update the screen
pygame.display.update()
# keyboard and mouse actions
for event in pygame.event.get():
if event.type == pygame.QUIT:
active = False
if event.type == KEYDOWN:
if event.key == K_s:
pygame.draw.line(screen, (200,0,0), (width/2+Vx*k,10),(width/2+Vx*k,height-10),3)
if event.key == K_v:
pygame.draw.circle(screen, (0,200,0), (int(width/2+Vx*k),int(height/2-Vy*k)),4)
if event.key == K_x:
if d<0:
instruct = font.render("The discriminant is "+str(d), 1, (250,0,0))
screen.blit(instruct, (width+20, 155))
else:
pygame.draw.circle(screen, (0,0,200), (int(width/2+x1*k),int(height/2)),4)
pygame.draw.circle(screen, (0,0,200), (int(width/2+x2*k),int(height/2)),4)
if event.key == K_n:
mymain()
# if exited from loop, then just quit
pygame.quit()
if __name__=='__main__':
mymain()