solution_250.py

#!/usr/bin/python3
# ==========================================================
# The equation for a cycloid curve is:
#    x = r(θ - sin(θ))
#    y = r(1 - cos(θ))
#
# where "r" is the radius of the rolling circle
# and "θ" is the angle of rotation. 
# ==========================================================

import math
import matplotlib.pyplot as plt

# ----------------------------------------------------------
# ---- sin curve x,y coordinates
# ----------------------------------------------------------

def sine_curve_xy():
    x_coords = []
    y_coords = []
    for deg in range(0,720,10):
        x_coords.append(deg)
        y_coords.append(math.sin(math.radians(deg)))
    return (x_coords,y_coords)

# ----------------------------------------------------------
# ---- sine curve plot
# ----------------------------------------------------------

def sine_curve_plot():

    # ---- define plot
    
    plt.figure(figsize=(8.0,4.0),layout='tight')
    plt.title('Sine Curve', fontsize=18)
    plt.xlabel('X', fontsize=14)
    plt.ylabel('Y', fontsize=14)
    plt.grid(True)

    # ---- sine plot coordinates

    x_coords,y_coords = sine_curve_xy()

    # ---- plot sine curve
    
    plt.plot(x_coords,y_coords,color='red',linewidth=1.0)
    plt.show()

# ----------------------------------------------------------
# ---- cycloid curve x,y coordinates
# ----------------------------------------------------------

def cycloid_curve_xy(raidus=10):
    x_coords = []
    y_coords = []
    for deg in range(0,720,10):
        x = raidus * (deg - math.sin(math.radians(deg)))
        x_coords.append(x)
        y = raidus * (1 - math.cos(math.radians(deg)))
        y_coords.append(y)
    return (x_coords,y_coords)

# ----------------------------------------------------------
# ---- cycloid curve plot
# ----------------------------------------------------------

def cycloid_curve_plot():

    # ---- define plot

    plt.figure(figsize=(8.0,3.0),layout='tight')
    plt.title('Cycloid Curve', fontsize=18)
    plt.xlabel('X', fontsize=14)
    plt.ylabel('Y', fontsize=14)
    plt.grid(True)

    # cycloid plot coordinates
    
    x_coords,y_coords = cycloid_curve_xy()

    # ---- plot cycloid curve
    
    plt.plot(x_coords,y_coords,color='red',linewidth=1.0)
    plt.show()

# ----------------------------------------------------------
# ---- main
# ----------------------------------------------------------

if __name__ == '__main__':

    ##sine_curve_plot()

    cycloid_curve_plot()