2538 - xOy
Enunt[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
Se vor afișa pe ecran două numere întregi, reprezentând coordonatele punctului P(XP,YP).
Restricţii şi precizări[edit | edit source]
XA,YA,XB,YB,XC,YC,XP,YP≤10^6; D^2PA,D^2PB,D^2PC≤10^6
Exemplu[edit | edit source]
- Intrare
-3 2 -1 -3 2 -2 100 89 41
- Iesire
7 2
Rezolvare[edit | edit source]
<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>