import cmath
import numpy as np


def angle_to_phi(degree):
    return degree / 360 * 2 * np.pi


def angle_to_degree(pi):
    return pi / 2 / np.pi * 360


a = cmath.rect(1, angle_to_phi(120))


def CreateU(Voltage, Angel):
    return cmath.rect(Voltage, angle_to_phi(Angel))


def CalculateU0(L1, L2, L3):
    U0 = 1 / 3 * (L1 + L2 + L3)
    return U0, U0, U0


def CalculateU1(L1, L2, L3):
    global a
    Ua1 = 1 / 3 * (L1 + a * L2 + a * a * L3)
    Ub1 = Ua1 * a * a
    Uc1 = Ua1 * a
    return Ua1, Ub1, Uc1


def CalculateU2(L1, L2, L3):
    global a
    Ua2 = 1 / 3 * (L1 + a * a * L2 + a * L3)
    Ub2 = Ua2 * a
    Uc2 = Ua2 * a * a
    return Ua2, Ub2, Uc2



U1 = CreateU(320, 0)
U2 = CreateU(335, 120)
U3 = CreateU(325, 238)
U3 = CreateU(0.9, 132)

Ua0, Ub0, Uc0 = CalculateU0(U1, U2, U3)
Ua1, Ub1, Uc1 = CalculateU1(U1, U2, U3)
Ua2, Ub2, Uc2 = CalculateU2(U1, U2, U3)

U0 = Ua0
U1 = Ua1
U2 = Ua2

u2 = abs(U2) / abs(U1) * 100.0
u1 = abs(U0) / abs(U1) * 100.0


print("Ua0: " + str(abs(Ua0)), ", Angel " + str(angle_to_degree(cmath.phase(Ua0))))
print("Ua1: " + str(abs(Ub0)), ", Angel " + str(angle_to_degree(cmath.phase(Ub0))))
print("Ua2: " + str(abs(Uc0)), ", Angel " + str(angle_to_degree(cmath.phase(Uc0))))
print("-----------------------------------------")
print("Ua1: " + str(abs(Ua1)), ", Angel " + str(angle_to_degree(cmath.phase(Ua1))))
print("Ub1: " + str(abs(Ub1)), ", Angel " + str(angle_to_degree(cmath.phase(Ub1))))
print("Uc1: " + str(abs(Uc1)), ", Angel " + str(angle_to_degree(cmath.phase(Uc1))))
print("-----------------------------------------")
print("Ua2: " + str(abs(Ua2)), ", Angel " + str(angle_to_degree(cmath.phase(Ua2))))
print("Ub2: " + str(abs(Ub2)), ", Angel " + str(angle_to_degree(cmath.phase(Ub2))))
print("Uc2: " + str(abs(Uc2)), ", Angel " + str(angle_to_degree(cmath.phase(Uc2))))

print("u2: " + str(u2) + "%")
print("u1: " + str(u1) + "%")
