2538 - xOy
Enunt
Laur desenează un sistem cartezian xOy și marchează 3 puncte necoliniare pe care le notează cu A, B și C, având coordonatele cunoscute (XA,YA), (XB,YB) și (XC,YC). Vine Laurențiu și îi șterge sistemul de coordonate, lăsând doar punctele A, B și C, iar apoi desenează un alt punct, P, de coordonate nedeterminate.
Laur va măsura distanța dintre punctul P și punctele A, B, respectiv C, obținând valori care, ridicate la pătrat, vor fi notate cu D^2PA, D^2PB, respectiv D^2PC.
Cerinţa
Cunoscându-se coordonatele celor 3 puncte desenate de Laur, precum și pătratul distanțelor dintre punctul P și acestea, să se afle coordonatele în xOy ale punctului P.
Date de intrare
Se vor citi de la tastatură numerele XA,YA,XB,YB,XC,YC, iar apoi numerele D^2PA,D^2PB,D^2PC, cu semnificația din enunț. Acestea vor fi separate (eventual pe linii) prin spații.
Date de ieșire
Se vor afișa pe ecran două numere întregi, reprezentând coordonatele punctului P(XP,YP).
Restricţii şi precizări
XA,YA,XB,YB,XC,YC,XP,YP≤10^6; D^2PA,D^2PB,D^2PC≤10^6
Exemplu
- Intrare
-3 2 -1 -3 2 -2 100 89 41
- Iesire
7 2
Rezolvare
<syntaxhighlight lang="python" line> import numpy as np from scipy.optimize import fsolve
def equations(vars, XA, YA, XB, YB, XC, YC, D2PA, D2PB, D2PC):
XP, YP = vars eq1 = (XP - XA)**2 + (YP - YA)**2 - D2PA eq2 = (XP - XB)**2 + (YP - YB)**2 - D2PB eq3 = (XP - XC)**2 + (YP - YC)**2 - D2PC return [eq1, eq2, eq3]
def find_coordinates(XA, YA, XB, YB, XC, YC, D2PA, D2PB, D2PC):
# Initial guess (XP, YP) initial_guess = (0, 0) # Solve the system of equations XP, YP = fsolve(equations, initial_guess, args=(XA, YA, XB, YB, XC, YC, D2PA, D2PB, D2PC)) return int(round(XP)), int(round(YP))
- Citirea datelor de intrare
XA, YA = -3, 2 XB, YB = -1, -3 XC, YC = 2, -2 D2PA, D2PB, D2PC = 100, 89, 41
- Calcularea coordonatelor punctului P
XP, YP = find_coordinates(XA, YA, XB, YB, XC, YC, D2PA, D2PB, D2PC)
- Afișarea rezultatului
print(XP, YP)
</syntaxhighlight>