solution_117_5.py

#!/usr/bin/python3
# ====================================================================
# plot curve #5
# ====================================================================

import numpy as np
import graphics as gr
import draw_xy_axes as ax

# -------------------------------------------------------------------
# ---- curve #5
# -------------------------------------------------------------------

def curve05(x):
    y = pow(np.e,(-1/np.e)) * pow((abs(x) + 1/np.e), \
                                 -(abs(x) + 1/np.e))
    return y

# --------------------------------------------------------------------
# ---- range function for floats
# --------------------------------------------------------------------

def frange(start,end,inc):
    while start < end:
        yield start
        start += inc

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

if __name__ == '__main__':

    # ---- draw a point (small circle) using window coordinates

    def draw_point(x,y,color='red',size=4):
        p = gr.Circle(gr.Point(x,y),size)
        p.setFill(color)
        p.setOutline('black')
        p.draw(win)
        return p

    # ---- setup graphics window

    win = gr.GraphWin('Curve #5',801,801)
    win.setBackground("white")

    # ---- draw X,Y axes

    ax.draw_xy_axes(win)

    # ---- plot curve #1
    # ---- X scale factor  100 offset 400
    # ---- Y scale factor -200 offset 400

    for x in frange(-4.0,4.0,0.2):
        y = curve05(x)
        print(f'x={x:>6.2f}  y={y:>6.2f}  (raw values)')
        x = 400 + (x * 35)
        y = 400 + (y * -300)
        draw_point(x,y)

    # ---- pause program (click in window to continue)

    click = win.getMouse()
    win.close()