A tractriz é uma curva no plano \((x,y)\) determinada pela seguinte propriedade: o segmento da tangente delimitado pelo ponto de tangência e pelo eixo dos \(x\) é constante.
Mais precisamente, suponha que uma partícula em \(Q\) com certa massa seja arrastada ao longo de um plano horizontal áspero por meio de uma corda \(QP\) mantida tensa, e com extremidade em \(P\) sobre o eixo \(x\). Então a curva descrita pela partícula é tractriz. A equação da tractriz, que obteremos abaixo, foi primeramente determinada por James Bernoulli em 1691.
Equação Diferencial da Tractriz
Chamando de \(a\) o comprimento do segmento \(QP\) então a função \(y(x)\), cujo gráfico é a curva descrita pela partícula, satisfaz à equação diferencial separável
Solução da Equação
É uma EDO do tipo separável. Realizando a integração, obtemos
Se \(x=0\) tem-se \(y=a\) e assim, obtemos que \(c=0.\) Donde segue que
Solução em detalhes
1. Separação de Variáveis
Reescrevemos a EDO em forma diferencial:
Separamos as variáveis:
2. Integração de Ambos os Lados
Resolvendo a integral do lado esquerdo:
Usamos a substituição trigonométrica \( y = a \sin \theta \):
A integral se torna:
Resultando em:
Resolvendo a integral do lado direito:
3. Solução Implícita
A solução geral na forma implícita é:
onde \( C \) é a constante de integração.
4. Solução Alternativa
Usando a substituição \( u = \sqrt{a^2 - y^2} \), obtemos:
Conclusão
A solução da EDO pode ser expressa de diferentes formas implícitas, sendo a principal:
Gráfico Interativo
Explore a tractriz ajustando o comprimento da corda \(a\):
Onde aparece a tractriz?
Implementação em JavaScript
O código abaixo calcula e plota a tractriz usando JavaScript e Plotly:
// Cálculo da tractriz em JavaScript
function calculateTractrix(a, numPoints) {
const x = [], y = [];
for (let i = 1; i <= numPoints; i++) { // Começa em 1 para evitar yi = 0
const yi = a * (i / numPoints);
const sqrtTerm = Math.sqrt(a*a - yi*yi);
x.push(a * Math.log((a + sqrtTerm) / yi) - sqrtTerm);
y.push(yi);
}
return {x, y};
}
// Exemplo de uso:
const a = 1;
const numPoints = 1000;
const tractrixData = calculateTractrix(a, numPoints);
// Configuração do gráfico Plotly
const trace = {
x: tractrixData.x,
y: tractrixData.y,
type: 'scatter',
mode: 'lines',
name: `Tractriz (a=${a})`,
line: {color: '#3498db', width: 2}
};
Implementação em Python
Para referência, o código equivalente em Python usando Matplotlib:
import numpy as np
import matplotlib.pyplot as plt
def plot_tractrix(a=1, num_points=1000):
t = np.linspace(0.001, a * 0.999, num_points) # Evita t = a
x = a * (np.log((a + np.sqrt(a**2 - t**2)) / t) - np.sqrt(a**2 - t**2) / a) # Corrigido o termo sqrt
y = t
plt.figure(figsize=(8, 6))
plt.plot(x, y, label=f'Tractriz (a={a})', color='blue')
plt.plot(0, a, 'ro', markersize=8, label=f'Ponto Inicial (0, {a})')
plt.title('Tractriz')
plt.xlabel('Eixo X')
plt.ylabel('Eixo Y')
plt.grid(True)
plt.legend()
plt.axis('equal') # Para manter a proporção correta
plt.show()
plot_tractrix()
Implementação em MatLab
O código abaixo calcula e plota a tractriz usando MatLab:
// Cálculo da tractriz em MatLab
%% Tractriz no Plano em live script
% Este script plota a curva conhecida como *tractriz*, definida por:
%
% $$ x(t) = a \left( \ln\left( \frac{a + \sqrt{a^2 - t^2}}{t} \right) - \sqrt{1 - \frac{t^2}{a^2}} \right), \quad y(t) = t $$
%
% A tractriz descreve a trajetória de um objeto puxado por uma corda rígida ao longo de um eixo.
% Parâmetros da curva:
a = 1; % Parâmetro da tractriz
num_points = 1000; % Número de pontos
% Geração dos valores de t no intervalo (0, a)
t = linspace(0.001, a - 0.001, num_points);
% Cálculo dos termos intermediários
raiz = sqrt(a.^2 - t.^2);
termo_log = log((a + raiz) ./ t);
termo_sqrt = sqrt(1 - (t.^2 ./ a.^2));
% Cálculo das coordenadas (x, y)
x = a * (termo_log - termo_sqrt);
y = t;
% Criação da figura
figure;
plot(x, y, 'b', 'LineWidth', 2);
hold on;
% Adiciona o ponto inicial (0, a)
plot(0, a, 'ro', 'MarkerFaceColor', 'r', 'MarkerSize', 8);
% Personalização
legend(['Tractriz (a = ', num2str(a), ')'], 'Ponto Inicial (0, a)', 'Location', 'best');
title('Tractriz');
xlabel('Eixo X');
ylabel('Eixo Y');
grid on;
axis equal;
Implementação em Maple
O código abaixo calcula e plota a tractriz usando Maple:
// Cálculo da tractriz em Maple
# Função para calcular e plotar a tractriz
>restart;
>with(plots);
>plotTractrix := proc(a::positive, num_points::posint)
local tvals, xvals, yvals, i, ptos, tractrix_curve, initial_point;
tvals := [seq(a*i/(num_points + 1), i = 1 .. num_points)];
xvals := [seq(a*(ln((a + sqrt(a^2 - tvals[i]^2))/tvals[i]) - sqrt(a^2 - tvals[i]^2)), i = 1 .. num_points)];
yvals := tvals; ptos := [seq([xvals[i], yvals[i]], i = 1 .. num_points)];
tractrix_curve := plot(ptos, style = line, color = blue, thickness = 2, legend = cat("Tractriz (a = ", a, ")"));
initial_point := pointplot([[0, a]], symbol = solidcircle, color = red, symbolsize = 12, legend = "Ponto Inicial (0, a)");
display([tractrix_curve, initial_point], title = "Tractriz", labels = ["Eixo X", "Eixo Y"], gridlines = true, scaling = constrained);
end proc;
> plotTractrix(1, 1000);