Como calculo as forças exercidas por um fio esticado que envolve objetos 2D?

10

Suponha que eu tenha uma primitiva de física que chamarei de "fio", envolvida em um ambiente 2D (como descrito nesta pergunta ).

Aqui está uma ilustração de como isso pode ser:

fio enrolado em objetos de jogo estáticos e dinâmicos

Na ilustração de exemplo: A caixa está sendo puxada para cima (sustentada) pelo fio e a caixa está puxando o fio para baixo. O objeto na mola está sendo empurrado para baixo pelo fio, mas também está empurrando o fio para cima.

Embora eu ainda não tenha descoberto como implementá-lo, suponha que o fio deslize livremente pelos pontos em que está enrolado.

Em uma simulação de física 2D (ou seja: com base em estrutura), como você calcula as forças (ou impulsos) a serem aplicados aos objetos que estão presos ou envolvidos por um fio como este?


Como aludi na minha primeira pergunta , imagino que se o único objeto não estático "ligado" no fio fosse a massa no final, a força seria idêntica a uma junta de comprimento fixo entre a massa e o ponto anterior. isso no fio.

Andrew Russell
fonte

Respostas:

9

A caixa que puxa o fio aplica uma tensão ao fio. A tensão é uma força, medida em Newtons. Se fizermos algumas suposições simplificadoras (sem atrito entre o fio e o ambiente), a tensão será a mesma em todos os pontos ao longo do fio.

Se considerarmos o seu exemplo estático, a tensão no fio é apenas o peso da caixa:

T = m * g

onde m é a massa da caixa eg é aceleração devido à gravidade (ou seja, 9,8 m / s ^ 2). Observe que isso só é válido no caso estático; veja abaixo uma explicação de como calculá-lo no caso dinâmico.

A força em cada curva do fio é apenas a projeção da tensão na direção relevante. Por exemplo, a força na ponta do objeto de mola é uma força ao longo do contato normal, de magnitude:

F = T * cos(angle between wire and contact normal)

Nesse caso, a direção normal do contato seria a bissecção do ângulo entre os segmentos do fio. A força no seu segundo ponto marcado no meio ambiente é irrelevante, pois não afeta a tensão ou qualquer outra coisa.

Agora, no caso dinâmico, a tensão é simplesmente a força de restrição que você aplica à caixa para mantê-la presa ao fio. Portanto, se o mecanismo de física é baseado em impulsos, a tensão é apenas:

T = impulse / timestep

Isso leva ao algoritmo geral para envolver também o fio no ambiente. A propriedade importante é o comprimento total do fio. Somente o último segmento precisa ser simulado, todos os segmentos anteriores podem ser considerados corrigidos. Portanto, o comprimento do último segmento é conhecido, apenas subtraia os comprimentos dos segmentos anteriores do comprimento total. Então o último segmento pode ser uma simples restrição de mola. Em seguida, divida um segmento sempre que cruzar com o ambiente e remova a divisão quando a dobra se endireitar.

Niall
fonte
Então, só para esclarecer: eu teria a massa livre em uma junta de comprimento fixo que se prende ao mundo na próxima "curva" do arame. Descobri qual o impulso que a junta aplica à caixa de cada quadro e, a partir daí, posso sentir a tensão no fio?
Andrew Russell
Também - estou preocupado F = T * cos(angle between wire and spring axis). Qual ângulo exatamente? Além disso: não acho que (na simulação) exista uma maneira sensata de fazer com que o fio "saiba" que existe uma mola presa a esse objeto.
Andrew Russell
@ Andrew - Para o seu primeiro ponto, sim, a força aplicada à caixa pela junta é, por definição, igual à tensão no fio. Para o seu segundo ponto, você está certo, isso não era muito claro, na verdade é o ângulo entre o fio e o ponto de contato normal. Eu editei a resposta para deixar isso mais claro.
Niall
4

Eu definitivamente aprecio sua frustração com esses threads baseados em fio, é um problema difícil de resolver. Nunca tivemos uma colisão funcionando perfeitamente, mas a simulação de restrição é definitivamente factível e direta.

Uma restrição de fio é quase idêntica a uma restrição de distância regular. Em vez de dois pontos de restrição, você tem n + 1 para um fio com n segmentos, um para cada vértice - nos pontos finais, o jacobiano é idêntico a uma restrição de distância (ou seja, é algo como d / | d | onde d é o vetor entre pontos) e, para os nós internos, o jacobiano é algo como (a / | a | - b / | b |) onde aeb são os vetores do nó para os nós adjacentes. (Desculpe, já faz alguns anos desde que eu toquei isso ...)

Você não pode fingir a la "apenas o último segmento é dinâmico" porque, como no seu exemplo, os objetos podem interagir com outros segmentos, mas você só precisa simular massas nas extremidades da corda - internamente a corda pode ser sem massa. Os impulsos de restrição calculados em cada nó precisam ser aplicados ao objeto que está colidindo nesse nó.

Aqui estão alguns artigos relacionados:

Os três primeiros são relativamente recentes e devem ajudar muito. A página 75 do papel de baixo descreve uma restrição "multibar", que é essencialmente um fio.

Boa sorte :)

Raigan

Raigan
fonte
0

A idéia básica é que o comprimento da corda permaneça o mesmo. Se estiver sendo empurrado para cima, você precisará criar um "ponto de divisão" lá. Então a corda determina de que lado está presa, porque não pode "crescer" nessa direção. Como está preso a algo à direita, o pedaço de corda à esquerda ficará mais curto e a peça entre o ponto de divisão e o ponto anexado ficará um pouco mais longa. Então, como Niall disse, calcule a tensão do fio. Como eu faria isso é calcular a tensão de cada "pedaço" de corda. Você pode usar isso para determinar as forças envolvidas.

Espero que isto ajude.

knight666
fonte
Na verdade não, desculpe.
Andrew Russell