Calculate a parabola from three known points

I was looking for a quick fix for calculating values along a parabola given three known points. Scouting around I found a nice symbolic C function doing exactly what I wanted (see here). The function doing the work of finding your unknowns is:

	def calc_parabola_vertex(x1, y1, x2, y2, x3, y3):
		Adapted and modifed to get the unknowns for defining a parabola:

		denom = (x1-x2) * (x1-x3) * (x2-x3);
		A     = (x3 * (y2-y1) + x2 * (y1-y3) + x1 * (y3-y2)) / denom;
		B     = (x3*x3 * (y1-y2) + x2*x2 * (y3-y1) + x1*x1 * (y2-y3)) / denom;
		C     = (x2 * x3 * (x2-x3) * y1+x3 * x1 * (x3-x1) * y2+x1 * x2 * (x1-x2) * y3) / denom;

		return A,B,C

By defining our three known xy points, we can use the above function to find the values of the unknowns a, b and c which would satisfy the equation of y = ax2 + bx + c:

	#Define your three known points

	#Calculate the unknowns of the equation y=ax^2+bx+c
	a,b,c=calc_parabola_vertex(x1, y1, x2, y2, x3, y3)

We now have our full equation and can apply it to calc values along the parabola:

	#Define x range for which to calc parabola
	import numpy as np


	#Calculate y values 
	for x in range(len(x_pos)):

And then to plot it we can just do this:

# Plot the parabola (+ the known points)
	import matplotlib.pyplot as plt

	plt.plot(x_pos, y_pos, linestyle='-.', color='black') # parabola line
	plt.scatter(x_pos, y_pos, color='gray') # parabola points
	plt.scatter(x1,y1,color='r',marker="D",s=50) # 1st known xy
	plt.scatter(x2,y2,color='g',marker="D",s=50) # 2nd known xy
	plt.scatter(x3,y3,color='k',marker="D",s=50) # 3rd known xy

…which gives us this:

Parabola from our three known points

Written on November 16, 2015