# Univerzitet u Novom Sadu, Fakultet tehničkih nauka, Novi Sad, Srbija
# Studijski program OAS Informacioni inženjering
# Predmet Metode i tehnike nauke o podacima

# Pomoćni sadržaj


# %% Biblioteke

import numpy as np
import matplotlib.pyplot as plt


# %% Implementacija funkcije pripadnosti

class PripadnostTrougaona:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
        self.očitavanje_pripadnosti_vektorski = np.vectorize(
            self.očitavanje_pripadnosti)

    def očitavanje_pripadnosti(self, x):
        if x >= self.a and x <= self.b:
            return (x - self.a) / (self.b - self.a)
        elif x > self.b and x <= self.c:
            return (self.c - x) / (self.c - self.b)
        else:
            return 0.0

def prikazivanje_pripadnosti(x, f):
    print("x = {x: 3.2f}, f(x) = {f: 3.2f}".format(
        x=x, f=f.očitavanje_pripadnosti(x)))


# %% Upotreba funkcije pripadnosti

print("Primer trougaone funkcije pripadnosti A")
print("")

funkcija_a = PripadnostTrougaona(-1, 0, 1)

for x in [-2, -1, -0.5, 0, 0.5, 1, 2]:
    prikazivanje_pripadnosti(x, funkcija_a)

print("")

x_a = np.arange(-2, 2, 0.1)
y_a = funkcija_a.očitavanje_pripadnosti_vektorski(x_a)
plt.figure()
plt.plot(x_a, y_a)
plt.title("Trougaona funkcija pripadnosti A ({a}, {b}, {c})".
          format(a=funkcija_a.a, b=funkcija_a.b, c=funkcija_a.c))

print("Primer trougaone funkcije pripadnosti B")
print("")

funkcija_b = PripadnostTrougaona(1, 4, 5)

x_b = np.arange(0, 6, 0.1)
y_b = funkcija_b.očitavanje_pripadnosti_vektorski(x_b)
plt.figure()
plt.plot(x_b, y_b)
plt.title("Trougaona funkcija pripadnosti B ({a}, {b}, {c})".
          format(a=funkcija_b.a, b=funkcija_b.b, c=funkcija_b.c))

