Come calcolo le forze esercitate da un filo teso che avvolge oggetti 2D?


10

Supponiamo di avere una primitiva di fisica che chiamerò un "filo", avvolto in un ambiente 2D (come descritto in questa domanda ).

Ecco un'illustrazione di come potrebbe apparire:

filo avvolto attorno a oggetti di gioco statici e dinamici

Nell'illustrazione di esempio: la scatola viene tirata verso l'alto (trattenuto) dal filo e la scatola tira il filo verso il basso. L'oggetto sulla molla viene spinto verso il basso dal filo, ma spinge anche il filo verso l'alto.

Anche se non ho ancora capito come implementarlo, supponi che il filo scivoli liberamente attraverso i punti attorno ai quali è avvolto.

In una simulazione di fisica 2D (ovvero: basata su frame) come si calcolano le forze (o gli impulsi) da applicare agli oggetti che sono attaccati o avvolti da un filo come questo?


Come ho accennato nella mia prima domanda , immagino che se l'unico oggetto non statico "su" il filo fosse la massa alla fine, la forza sarebbe identica a un giunto a lunghezza fissa tra la massa e il punto prima quello sul filo.

Risposte:


9

La scatola che tira il filo applica una tensione al filo. La tensione è una forza, misurata in Newton. Se facciamo alcune ipotesi semplificanti (nessun attrito tra filo e ambiente), la tensione è la stessa in tutti i punti lungo il filo.

Se consideriamo il tuo esempio come statico, la tensione sul filo è solo il peso della scatola:

T = m * g

dove m è la massa della scatola e g è l'accelerazione dovuta alla gravità (cioè 9,8 m / s ^ 2). Nota che questo è valido solo nel caso statico, vedi sotto per una spiegazione su come calcolarlo nel caso dinamico.

La forza ad ogni curva del filo è quindi solo la proiezione della tensione nella direzione pertinente. Ad esempio la forza sulla punta dell'oggetto a molla è una forza lungo il contatto normale, di magnitudine:

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

In questo caso la direzione normale del contatto sarebbe la sezione dell'angolo tra i segmenti di filo. La forza al tuo secondo punto segnato sull'ambiente è irrilevante, poiché non ha alcun impatto sulla tensione o altro.

Ora, nel caso dinamico, la tensione è semplicemente la forza di vincolo che si applica alla scatola per tenerla attaccata al filo. Quindi se il motore fisico è basato sugli impulsi, la tensione è solo:

T = impulse / timestep

Questo porta all'algoritmo generale per avvolgere il filo anche nell'ambiente. L'importante proprietà è la lunghezza totale del filo. Solo l'ultimo segmento deve essere simulato, tutti i segmenti precedenti possono essere considerati fissi. Quindi la lunghezza dell'ultimo segmento è nota, basta sottrarre le lunghezze dei segmenti precedenti dalla lunghezza totale. Quindi l'ultimo segmento può essere un semplice vincolo a molla. Quindi dividi un segmento ogni volta che si interseca con l'ambiente e rimuovi la divisione quando la curva si raddrizza.


Quindi - solo per chiarire: avrei la massa libera su un giunto a lunghezza fissa che si attacca al mondo alla prossima "curva" nel filo. Scopro quale impulso quell'articolazione si applica alla scatola di ogni telaio e da lì posso ottenere la tensione nel filo?
Andrew Russell,

Inoltre - sono preoccupato F = T * cos(angle between wire and spring axis). Quale angolo, esattamente? Inoltre: non penso che (nella simulazione) esista un modo ragionevole per far "sapere" al filo che esiste una molla attaccata a quell'oggetto.
Andrew Russell,

@Andrew - Per il tuo primo punto, sì, la forza applicata alla scatola dall'articolazione è per definizione uguale alla tensione nel filo. Per il tuo secondo punto, hai ragione, questo non era molto chiaro, in realtà è l'angolo tra il filo e il punto di contatto normale. Ho modificato la risposta per renderlo più chiaro.
Niall,

4

Apprezzo sicuramente la tua frustrazione in questi thread basati su filo, è un problema difficile da risolvere. La collisione non ha mai funzionato perfettamente, ma la simulazione del vincolo è sicuramente fattibile e semplice.

Un vincolo di filo è in realtà quasi identico a un vincolo di distanza regolare. Invece di due punti di vincolo hai n + 1 per un filo con n segmenti, uno per ogni vertice - ai punti finali il giacobino è identico a un vincolo di distanza (cioè è qualcosa come d / | d | dove d è il vettore tra punti), e per i nodi interni il giacobino è qualcosa di simile (a / | a | - b / | b |) dove aeb sono i vettori dal nodo ai nodi adiacenti. (Scusa, sono passati un paio d'anni da quando ho toccato questo ...)

Non puoi falsificarlo a-la "solo l'ultimo segmento è dinamico" perché, come nel tuo esempio, gli oggetti possono interagire con altri segmenti, ma devi solo simulare le masse alle estremità della corda - internamente la corda può essere senza massa. Gli impulsi di vincolo calcolati su ciascun nodo devono essere applicati all'oggetto che si scontra su quel nodo.

Ecco alcuni articoli correlati:

I primi tre sono relativamente recenti e dovrebbero aiutare molto. La pagina 75 della carta in basso descrive un vincolo "multibar" che è essenzialmente un filo.

In bocca al lupo :)

raigan


0

L'idea di base è che la lunghezza della corda rimane la stessa. Se viene espulso, dovrai creare un "punto di divisione" lì. Quindi la corda determina da quale parte è attaccata, perché non può "crescere" in quella direzione. Poiché è attaccato a qualcosa a destra, il pezzo di corda a sinistra diventerà più corto e il pezzo tra il punto di divisione e il punto attaccato diventerà leggermente più lungo. Quindi, come ha detto Niall, calcola la tensione del filo. Come farei questo è calcolare la tensione di ogni "pezzo" di corda. È quindi possibile utilizzare questo per determinare le forze coinvolte.

Spero che sia di aiuto.


Non proprio, scusa.
Andrew Russell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.