2538 - xOy

From Bitnami MediaWiki
Revision as of 14:17, 3 June 2024 by AjM (talk | contribs) (→‎Exemplul 1)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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))
  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>