2538 - xOy

De la Universitas MediaWiki

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

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)