import numpy as np
def coeffs_and_params(a,b,c,p,q):
qp = q / c
pp = (p*c - b*q) / (a*c)
A = qp**2 / a**2
B = -2*qp/(a*c)*(qp*b/a + pp)
C = (qp*b/a + pp)**2 / c**2
D = -qp**2 / a
E = (qp**2*b/a - pp**2) / c
return A,B,C,D,E, pp, qp
def map_uv(a,b,c, uv):
u,v = uv
return np.array([a*u + b*v, c*v])
def triangle_area(P1, P2, P3):
# Εμβαδόν τριγώνου από συντεταγμένες με τύπο ορίζουσας
x1, y1 = P1
x2, y2 = P2
x3, y3 = P3
return 0.5 * abs(x1*(y2 - y3) + x2*(y3 - y1) + x3*(y1 - y2))
def main():
print("Παραβολή από A(0,0), B(a,0), C(b,c) με άξονα (p,q)")
a = float(input("a για B(a,0): "))
b = float(input("b για C(b,c): "))
c = float(input("c για C(b,c): "))
p = float(input("p : "))
q = float(input("q : "))
A,B,C,D,E, pp, qp = coeffs_and_params(a,b,c,p,q)
print("\nΕξίσωση παραβολής:")
eq = f"{A:.6g}x² {'+' if B>=0 else '-'} {abs(B):.6g}xy {'+' if C>=0 else '-'} {abs(C):.6g}y² {'+' if D>=0 else '-'} {abs(D):.6g}x {'+' if E>=0 else '-'} {abs(E):.6g}y = 0"
print(eq)
# σημεία στο (u,v)
Kp, Lp, Mp = (0.5,0.5), (0.0,0.5), (0.5,0.0)
u = - qp / (4*pp*(pp+qp))
Rp = (0.5 + u*pp, u*qp)
s = -1/(4*pp)
Pp = (Kp[0] + s*pp, Kp[1] + s*qp)
t = 1/(4*(pp+qp))
Qp = (Lp[0] + t*pp, Lp[1] + t*qp)
pts = {}
for name,uv in {"K":Kp,"L":Lp,"M":Mp,"R":Rp,"P":Pp,"Q":Qp}.items():
pts[name] = map_uv(a,b,c, uv)
pts["A"] = np.array([0,0])
pts["B"] = np.array([a,0])
pts["C"] = np.array([b,c])
# Υπολογισμός εμβαδών
area_RPK = triangle_area(pts["R"], pts["P"], pts["K"])
area_RQL = triangle_area(pts["R"], pts["Q"], pts["L"])
print(f"\nΕμβαδό τριγώνου RPK: {area_RPK:.6g}")
print(f"Εμβαδό τριγώνου RQL: {area_RQL:.6g}")
print(f"Διαφορά εμβαδών: {abs(area_RPK - area_RQL):.6g}")
if __name__ == "__main__":
main()