Guest User

Untitled

a guest
Nov 16th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. import matplotlib as mpl
  2. import numpy as np
  3. from scipy.misc import comb
  4. from matplotlib import pyplot as plt
  5.  
  6. def bernstein_poly(i, n, t):
  7. return comb(n, i) * (t**(n - i)) * (1 - t)**i
  8.  
  9.  
  10. def bezier_curve(points, nTimes=1000):
  11. nPoints = len(points)
  12. xPoints = np.array([p[0] for p in points])
  13. yPoints = np.array([p[1] for p in points])
  14. zPoints = np.array([p[2] for p in points])
  15.  
  16. t = np.linspace(0.0, 1.0, nTimes)
  17.  
  18. polynomial_array = np.array(
  19. [bernstein_poly(i, nPoints - 1, t) for i in range(0, nPoints)])
  20.  
  21. xvals = np.dot(xPoints, polynomial_array)
  22. yvals = np.dot(yPoints, polynomial_array)
  23. zvals = np.dot(zPoints, polynomial_array)
  24.  
  25. return xvals, yvals, zvals
  26.  
  27. nPoints = 3
  28. points = [[1,1,0],[1,2,1],[1,3,1]]
  29.  
  30. xpoints = [p[0] for p in points]
  31. ypoints = [p[1] for p in points]
  32. zpoints = [p[2] for p in points]
  33.  
  34. xvals, yvals, zvals = bezier_curve(points, nTimes=1000)
  35.  
  36.  
  37. fig = plt.figure()
  38. ax = fig.gca(projection='3d')
  39. ax.plot(xvals, yvals, zvals, label='bezier')
  40. ax.plot(xpoints, ypoints, zpoints, "ro")
  41.  
  42. for nr in range(len(points)):
  43. ax.text(points[nr][0], points[nr][1], points[nr][2], nr)
  44.  
  45. plt.show()
Add Comment
Please, Sign In to add comment