Exemplo 6.1: Determinar os ponto da reta que passa por A=(2,3) e B=(5,2) e formam com Q=(1,0) e R=(4,1) um triângulo de área 2.

import sympy as sp

A=sp.Matrix([2,3])
B=sp.Matrix([5,2])

Q=sp.Matrix([1,0])
R=sp.Matrix([4,1])

#obtendo um ponto P genérico pertencente à reta AB
t=sp.symbols('t',real=True)
#vetor diretor
v=B-A
#equação paramétrica da reta
P=A+t*v
print('Coordenadas o ponto P dadas pela equação paramétrica')
display(P)

#calculando a área do triângulo usando Q como vértice
u=P-Q
v=R-Q

#matriz cujas colunas são u e v, lados do triângulo

M=u.col_insert(1, v)
print('Matriz cujas colunas são os vetores u=QP e v=QR')
display(M)

print('área do triângulo')
area=sp.Abs(M.det())/2
display(area)

#equação que devemos resolver
print('Equação a se resolver')
eq=sp.Eq(area,2)
display(eq)

print('solução da equação')
sol=sp.solve(eq,t,dict=True)
display(sol)

print('Pontos buscados')

P1=P.subs(t,sol[0][t])
display(P1)

P2=P.subs(t,sol[1][t])
display(P2)
Coordenadas o ponto P dadas pela equação paramétrica
Matrix([
[3*t + 2],
[  3 - t]])
Matriz cujas colunas são os vetores u=QP e v=QR
Matrix([
[3*t + 1, 3],
[  3 - t, 1]])
área do triângulo
Abs(6*t - 8)/2
Equação a se resolver
Eq(Abs(6*t - 8)/2, 2)
solução da equação
[{t: 2/3}, {t: 2}]
Pontos buscados
Matrix([
[  4],
[7/3]])
Matrix([
[8],
[1]])

Exemplo 6.2: Determine a equação cartesiana da reta que passa pelos pontos A=(3,2) e B=(-3,1)

import sympy as sp

A=sp.Matrix([3,2])
B=sp.Matrix([-3,1])


#vetor diretor da reta
v=B-A

#vetor normal à v
n=sp.Matrix([-v[1],v[0]])

#variáveis
x,y=sp.symbols('x y',real=True)
X=sp.Matrix([x,y])

#equação cartesiana usando o vetor n e o ponto A
eq=sp.Eq(n.dot(X-A),0)
print('Equação cartesiana da reta que passa por A e B')
display(eq)
Equação cartesiana da reta que passa por A e B
Eq(x - 6*y + 9, 0)

Exemplo 6.3: Considere os pontos A=(2,1) e B=(-1,5). Dertermine os pontos sobre a reta r: 2x+5y=3 que formam com A e B um triângulo de área 15.

import sympy as sp

A=sp.Matrix([2,1])
B=sp.Matrix([-1,5])


#para resolver esse problema, vamos obter as equações paramétricas de r e aplicar o feito anteriormente

#vetor perpendicular à reta r
n=sp.Matrix([2,5])

#vetor paralelo a r
v=sp.Matrix([-n[1],n[0]])

#obtendo um ponto de r fazendo x=0
x,y=sp.symbols('x y',real=True)
eq=sp.Eq(2*x+5*y,3)
eq0=sp.Eq(x,0)
sol=sp.solve((eq,eq0),(x,y))
P0=sp.Matrix([0,sol[y]])

# escrevendo um ponto P usando as equações paramétricas
t=sp.symbols('t',real=True)
P=P0+t*v
print('Coordenadas de um ponto P genérico')
display(P)

#agora é só repetir o feito no exemplo anterior:


#calculando a área do triângulo usando A como vértice
u=P-A
v=A-B

#matriz cujas colunas são u e v, lados do triângulo

M=u.col_insert(1, v)
print('Matriz cujas colunas são os vetores u=AP e v=AB')
display(M)

print('área do triângulo')
area=sp.Abs(M.det())/2
display(area)

#equação que devemos resolver
print('Equação a se resolver')
eq=sp.Eq(area,2)
display(eq)

print('solução da equação')
sol=sp.solve(eq,t,dict=True)
display(sol)

print('Pontos buscados')

P1=P.subs(t,sol[0][t])
display(P1)

P2=P.subs(t,sol[1][t])
display(P2)


# vamos agora plotar os triângulos e a reta

import matplotlib.pyplot as plt

plt.plot([A[0],B[0],P1[0],A[0]],[A[1],B[1],P1[1],A[1]],'b-',label='triângulo 1')
plt.plot([A[0],B[0],P2[0],A[0]],[A[1],B[1],P2[1],A[1]],'r-',label='triângulo 2')

plt.annotate('B', (B[0], B[1]), textcoords="offset points", xytext=(0,-20), ha='center',color='blue')
plt.annotate('A', (A[0], A[1]), textcoords="offset points", xytext=(2,-20), ha='center',color='blue')


#esboçando a reta por P1 e P2 usando a equação paramétrica
import numpy as np

t = np.linspace(-1,0.5,50)
z = -5*t
w = 2*t+3/5
plt.plot(z, w,'g',label='reta r')

plt.grid()
plt.legend()
plt.show()
Coordenadas de um ponto P genérico
Matrix([
[     -5*t],
[2*t + 3/5]])
Matriz cujas colunas são os vetores u=AP e v=AB
Matrix([
[ -5*t - 2,  3],
[2*t - 2/5, -4]])
área do triângulo
Abs(14*t + 46/5)/2
Equação a se resolver
Eq(Abs(14*t + 46/5)/2, 2)
solução da equação
[{t: -33/35}, {t: -13/35}]
Pontos buscados
Matrix([
[33/7],
[-9/7]])
Matrix([
[13/7],
[-1/7]])