Eu já trabalhei um pouco mais nisto, por isso acho que vou pegar uma facada na minha própria pergunta. Aqui está nosso limacon novamente.

o limacon $\gamma(t)$

Notem com o que começamos: um parâmetro de tempo $t$ que corre em passos iguais no intervalo $$, a distância cumulativa $s$ percorrida ao longo do comprimento do arco no tempo $t$, e as coordenadas cartesianas do limacon $\gamma $ no tempo $t$. Nós colocamos este valor na pergunta. O que queremos em vez disso é um parâmetro $s$ que corre em passos iguais no intervalo $$, onde $L$ é o comprimento total do arco, juntamente com o tempo $t(s)$ a $s$ e as coordenadas cartesianas $\gamma (t(s))$.

Real quick, vamos refazer a distância cumulativa $s$ percorrida ao longo do comprimento do arco com derivative (link File Exchange) para que não percamos amostras.

x_t = derivative(x);y_t = derivative(y);s = cumtrapz( sqrt(x_t.^2 + y_t.^2 ) );

Estaremos usando a função Matlab interp1 para interpolar os timepoints $t(s_i)$ e as coordenadas $\gamma (t(s_i))$ que correspondem aos passos igualmente espaçados $s_i$ ao longo do comprimento do arco. Assim, nós declaramos os argumentos para interp1 com os nomes das variáveis dados na sua documentação. O vetor X é o $s_i$ original, ou seja, a distância percorrida ao longo do comprimento do arco no tempo $t_i$. A matriz V tem vetores de coluna cujas linhas são $t_i$ (nosso parâmetro de tempo original em tamanho de passo igual), e as coordenadas $\gamma (t_i)$.

X = s.';V = ;

Precisamos interpolar para encontrar os pontos de tempo $t(s_i)$ correspondentes aos passos de comprimento do arco igualmente espaçados ao longo da curva. Estes passos igualmente espaçados correm de $s_0=0$ a $s_N=L$, onde $L$ é o comprimento total do arco.

L = s(end);s0 = s(1);N = length(s);Xq = linspace(s0,L,N); % equally spaced indices

Podemos verificar que s(N) == sum(diff(Xq)), como deve ser o caso. Usamos a capacidade de interpolação linear multidimensional em sentido de peça da função de interpolação do Matlab interp1 para encontrar valores interpolados para o tempo $t(s_i)$ e coordenadas $\gamma (t(s_i))$ que correspondem aos passos igualmente espaçados de $s_i$ dados em Xq.

Vq = interp1(X,V,Xq); 

Uma chamada para diff(Xq) mostra que estamos nos movendo em passos de comprimento de arco constante ao longo de $\gamma $, enquanto uma chamada para diff(Vq) mostra que os passos de tempo não são mais iguais (primeira coluna). Assim, o resultado da nossa interpolação é:

  • comprimento do arco $s_i$ em passos constantes (Xq)
  • pontos de tempo correspondentes $t_i$, não mais em passos constantes (primeira coluna de Vq)
  • coordenadas $\gamma(t(s))$ como função do comprimento do arco (segunda e terceira colunas de Vq)

Então a parametrização do comprimento do arco do limacon $\gamma(t(s))$ é expressa em coordenadas cartesianas como xs e ys.

xs = Vq(:,2);ys = Vq(:,3);

Estes vetores dão a posição de uma partícula movendo-se ao longo de $\gamma $ em função de $s$, onde $s$ incrementos em passos de 0.1058. Aqui estão as duas parametrizações da curva $\gamma $, nomeadamente $\gamma (t)$ em azul e $\gamma (t(s))$ em vermelho.

dois parametrizações

Tenho de fazer mais algum trabalho se quiser permitir soluções periódicas, uma vez que o actual script Matlab não o faz em geral. Para ver isto, basta olhar para a distância entre a última e primeira amostra de $\gamma (t(s))$ em vermelho acima. Se avançássemos mais um passo de 0.1058 unidades ao longo do limacon não pousaríamos num ponto que já visitámos, apesar de sabermos que os limacons são $2\pi$-periódicos. Eu acho que isso equivale basicamente a escolher um passo de tamanho diferente para $s$ do que 0.1058.

.

Deixe uma resposta

O seu endereço de email não será publicado.