2538 - xOy

From Bitnami MediaWiki

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))
  1. Citirea datelor de intrare

XA, YA = -3, 2 XB, YB = -1, -3 XC, YC = 2, -2 D2PA, D2PB, D2PC = 100, 89, 41

  1. Calcularea coordonatelor punctului P

XP, YP = find_coordinates(XA, YA, XB, YB, XC, YC, D2PA, D2PB, D2PC)

  1. Afișarea rezultatului

print(XP, YP)

</syntaxhighlight>