Write A Python Program

TASK 1:  Animated Sine Curve

Write a Python program one.py with PyOpenGL to display an animation of sine function y=Asin(x+B), satifying the following requirements:

  • The window application’s size is (600, 600), and its upper-left corner is at (250, 250) on the screen;
  • The window application’s title is Animated Sine Curve.
  • The ranges of x and y are [-4, 4] (x is in radians);
  • The amplitude A is a random float in [1, 2], and it is updated each time the window application restarts;
  • The phase shift B is a float; it is initialized as 0, and incremented by 0.01 each time the screen refreshes;
  • The two axes are drawn in white, with an arrow towards the positive direction at the end of each axis;
  • The sine curve is drawn in yellow.
  • Orthogonal projection is used in this task.

The following figure illustrates the expected window application.

TASK 2:  Clamped B-Spline

Write a Python program two.py with PyOpenGL to display a clamped B-spline, satifying the following requirements:

  • The window application’s size is (550, 550), and its upper-left corner is at (150, 150) on the screen;
  • The window application’s title is Special B-Splines.
  • The program reads a text file named control-points.txt, including an x,y coordinate pair in each line as a control point, in the same folder;
  • Control points are drawn with size 4 in green.
  • Based on the control points, a clamped B-spline is drawn.
  • P(t)’s color, mixed by red and blue, depends on its curvature (R = curvature / 5, G = 0.0, B = 1 – curvature / 5);
  • Curvature is clipped by [0, 5].
  • Orthogonal projection is used in this task.

The following figure illustrates the expected window application, reading the sample control-points.txt provided.

TASK 3:  Hexagonal Pyramid

Write a Python program three.py with PyOpenGL to display a 3D hexagonal pyramid, satifying the following requirements:

  • The window application’s size is (400, 400), and its upper-left corner is at (100, 100) on the screen;
  • The window application’s title is Hexagonal Pyramid.
  • The program reads a text file named pyramid-params.txt, including one line as x,y,z,H,R, in the same folder, where xy and z are the coordinates of the top vertex vH is the height, and R is the radius; we assume the top vertex v and the base centroid c are on the same vertical axis, and c is always under v; the distance between c and any base vertex vi is always R.
  • Based on the above information, a hexagonal pyramid is drawn.
  • All faces are randomly and differently colored, except for the base in white.
  • When the key R is pressed, the radis increases by 0.01 and the hexagonal pyramid is redrawn.
  • When the key H is pressed, the height decreases by 0.01 and the hexagonal pyramid is redrawn.
  • The hexagonal pyramid is static by default; When the key XY or Z is pressed, the hexagonal pyramid toggles between being static and rotating 1 degree/refresh along the corresponding axis (i.e., the key X corresponds to the x axis), taking c as the origin.
  • Perspective projection is used in this task (FoV is 90 degrees towards the y-axis; Camera looks at the origin and uses the y-axis direction as the up-vector).

The following figure illustrates the expected window application, reading the sample pyramid-params.txt provided.