Aqui está um post que contém links para artigos sobre tipos semelhantes de simulações (em contextos acadêmicos / de engenharia, e não em jogos): https://gamedev.stackexchange.com/a/10350/6398
Eu tentei pelo menos duas abordagens diferentes para detecção de colisão + resposta para esse tipo de simulação de "fio" (como visto no jogo Umihara Kawase); pelo menos, acho que é isso que você procura - não parece haver um termo específico para esse tipo de simulação, apenas o chamo de "fio" em vez de "corda", porque parece que a maioria das pessoas considere "corda" como sinônimo de "uma cadeia de partículas". E, se você deseja o comportamento grudento da corda ninja (ou seja, pode empurrar E puxar), isso é mais como um fio rígido do que uma corda. De qualquer forma..
A resposta de Pekuja é boa: você pode implementar a detecção contínua de colisões resolvendo o tempo em que a área assinada dos três pontos é 0.
(Não consigo me lembrar totalmente do OTOH, mas você pode abordá-lo da seguinte forma: encontre o tempo t quando o ponto a está contido na linha que passa por b, c (acho que fiz isso resolvendo quando ponto (ab, cb) = 0 para encontrar valores de t) e, em seguida, dado um tempo válido 0 <= t <1, encontre a posição paramétrica s de a no segmento bc, ou seja, a = (1-s) b + s c e se a estiver entre bec (ou seja, se 0 <= s <= 1) é uma colisão válida.
No AFAICR, você também pode abordá-lo de outra maneira (ou seja, resolver s e depois conectar isso para encontrar t), mas é muito menos intuitivo. (Desculpe se isso não faz sentido, não tenho tempo para desenterrar minhas anotações e já faz alguns anos!)
Portanto, agora você pode calcular todos os horários em que os eventos ocorrem (ou seja, nós de corda devem ser inseridos ou removidos); processe o evento mais antigo (insira ou remova um nó) e repita / recorra até que não haja mais eventos entre t = 0 e t = 1.
Um aviso sobre essa abordagem: se os objetos que a corda pode envolver são dinâmicos (especialmente se você os estiver simulando E seus efeitos na corda e vice-versa), pode haver problemas se esses objetos passarem por cada um deles. outro - o fio pode ficar embaraçado. Definitivamente, será desafiador impedir esse tipo de interação / movimento (os cantos dos objetos deslizando um pelo outro) em uma simulação física no estilo box2d. Pequenas quantidades de penetração entre objetos são comportamentos normais nesse contexto.
(Pelo menos .. este foi um problema com uma das minhas implementações de "wire".)
Uma solução diferente, que é muito mais estável, mas que perde algumas colisões em determinadas condições, é usar apenas testes estáticos (ou seja, não se preocupe em ordenar por tempo, apenas subdividir recursivamente cada segmento em colisão conforme você os encontrar), que pode ser muito mais robusto - o fio não se enrosca nos cantos e pequenas quantidades de penetração são boas.
Eu acho que a abordagem de Pekuja também funciona para isso, no entanto, existem abordagens alternativas. Uma abordagem que usei é adicionar dados de colisão auxiliar: em cada vértice convexo v do mundo (ou seja, nos cantos das formas pelas quais a corda pode envolver), adicione um ponto u formando o segmento de linha direcionada uv, onde u é aponte "dentro do canto" (ou seja, dentro do mundo, "atrás" v; para calcular u, você pode lançar um raio para dentro de v ao longo de seu normal interpolado e parar uma distância depois de v ou antes que o raio se cruze com uma extremidade do mundo e sai da região sólida ou você pode pintar manualmente os segmentos no mundo usando uma ferramenta visual / editor de níveis).
De qualquer forma, agora você tem um conjunto de "corner linesegs" uv; para cada uv e cada segmento ab na conexão, verifique se ab e uv se cruzam (ou seja, estática, consulta booleana de linhas e linhas); se for o caso, recursione (divida a linha seg ab em av e vb, ou seja, insira v), registrando em que direção o cabo dobrou em v. Em seguida, para cada par de linhas vizinhas ab, bc no fio, teste se a direção atual da curva em b é o mesmo de quando b foi gerado (todos esses testes de "direção da dobra" são apenas testes de área assinada); caso contrário, mescle os dois segmentos em ac (ou seja, remova b).
Ou talvez eu tenha me fundido e depois dividido, eu esqueço - mas definitivamente funciona em pelo menos uma das duas ordens possíveis! :)
Dado todos os segmentos de fios calculados para o quadro atual, você pode simular uma restrição de distância entre os dois pontos finais do fio (e pode até envolver os pontos internos, ou seja, os pontos de contato entre o fio e o mundo, mas isso é um pouco mais envolvido )
De qualquer forma, espero que isso tenha alguma utilidade ... os artigos no post que eu vinculei também devem lhe dar algumas idéias.