Come posso calcolare la rotazione causata dall'attrito da rimbalzo?


15

In seguito alla mia domanda precedente : ho la palla che rimbalza abbastanza realisticamente dalle superfici che colpisce. Ora vorrei farlo girare per l'attrito del colpo .

Mostrarlo è abbastanza semplice: faccio ruotare la pallina in base alla sua velocità angolare ad ogni tick e applico la stessa rotazione quando viene renderizzata.

Quando una palla colpisce un muro, so che la velocità di rotazione è influenzata da ...

  • la velocità iniziale della palla quando colpisce la superficie
  • i coefficienti di attrito della sfera e della superficie (costanti fisiche)
  • l' angolo di incidenza (l'angolo tra il vettore di velocità in entrata della palla e la normale alla superficie).

L'angolo di incidenza è approssimato dal prodotto punto dell'impatto della palla e dai vettori di velocità di uscita. (1 significa rotazione alta, -1 significa nessuna rotazione e tutto il resto relativamente in mezzo)

Moltiplicando tutto quanto sopra e assicurandosi che siano stati poi trasformati nell'intervallo 0 - 1 e moltiplicati per la massima velocità di rotazione, la palla sembrava rispondere alla velocità di rotazione come previsto. Tranne una cosa: ruoterebbe sempre in senso orario (a causa di valori positivi).


È un buon metodo? Riesci a pensare a un modo più semplice?

Se questo metodo sembra a posto, cosa mi sto perdendo? Come faccio a sapere quando la palla dovrebbe ruotare in senso antiorario?

Risposte:


2

Il tuo metodo è carino, perché è molto semplice. Una cosa di cui potresti aver bisogno è la dipendenza dal precedente giro sulla palla, che non prendi in considerazione. La palla che gira rappresenta l'energia di rotazione, quindi una simulazione realistica dovrebbe probabilmente conservarla insieme alle altre energie.

Tuttavia, se la palla non ruota al momento dell'impatto, non riesco a immaginare una situazione in cui inizia la rotazione nella direzione dell'angolo dell'incidente. Cioè, "in senso orario" o "antiorario" dovrebbe essere relativo a qualunque lato della normale sia l'angolo incidente.

Penso semplicemente che moltiplicare il risultato per il vettore originale in direzione x (+1 se viaggiando da sinistra a destra, -1 se viaggiando da destra a sinistra) dovrebbe farlo.

Modifica: è possibile utilizzare il prodotto incrociato per questo. Incident cross normalfornisce un vettore solo nella direzione Z (se ci troviamo sul piano xy 2D). Guarda l'elemento z: se è positivo, l'approccio della palla dovrebbe farla girare in senso orario. Se è negativo, la palla dovrebbe girare in senso antiorario.


Ehi eli In primo luogo, sto prendendo in considerazione lo spin originale della palla, ho appena dimenticato di menzionarlo nel mio post In secondo luogo, non penso che il sistema di direzione x funzionerebbe. Ci ho provato, ma se la palla colpisce la superficie dal basso andando a sinistra, il vettore x sarebbe -1, significherebbe una rotazione in senso antiorario, mentre in realtà dovrebbe ruotare in senso orario
codemonkey

Come si tiene conto della rotazione originale della palla? Se ruota molto velocemente, potrebbe lanciarsi in una direzione completamente diversa. Il problema con dot-product nel tuo caso è che usa il coseno (una funzione uniforme). Hai bisogno di qualcos'altro per impostare il segno della relazione tra i tuoi vettori (incidente e normale). A questo scopo è possibile utilizzare un prodotto incrociato (prodotto vettoriale). Ho modificato la mia risposta per includere un metodo tra prodotti.
eli

rileggere la risposta dopo la modifica mi piace. L'ho provato e ha funzionato abbastanza bene. Per quanto riguarda lo spin originale, stavo solo parlando di cambiare gradualmente la rotazione ... per quanto riguarda lo spin originale che influenza il vettore di uscita, beh, questo è il mio prossimo passo :)
codemonkey

Ouch, la modifica è stata una delle 3 diverse soluzioni che ho suggerito e ho spiegato perché dovevi farlo (il punto dà solo magnitudine, non direzione dell'angolo). Purtroppo, dovrei essere più conciso, immagino.
Kaj,

scusa per quel kaj, mi ha fatto scivolare ... nessuna offesa voluta :)
codemonkey l'

3

Per prima cosa ottenere la superficie tangente dalla normale alla superficie: t = (ny, -nx)

Quindi puoi ottenere il componente di velocità lungo la superficie come vt = v punto t .

Ora puoi calcolare la rotazione della palla: w = | ( normale * r) croce vt |, dove r è il raggio della palla.

Qui suppongo che la palla non abbia inerzia rotazionale e inizi a girare all'istante alla velocità che avrebbe se rotolasse lungo la superficie. È possibile utilizzare un coefficiente di attrito per renderlo più realistico e, se lo si desidera, prendere in considerazione l'inerzia rotazionale della palla.


Grazie per la risposta Danik. Sto già prendendo in considerazione l'inerzia rotazionale della palla (aggiungendola alla nuova rotazione) e anche l'attrito della superficie come coefficiente da moltiplicare per la velocità di rotazione totale. Maggiore è l'attrito, maggiore è la velocità di rotazione, giusto?
codemonkey

2

Ok, questo potrebbe sembrare stupido ma non stai usando il prodotto punto del vettore palla e la superficie normale e stai solo facendo un arccos per calcolare l'angolo, vero? Perché allora l'angolo sarebbe positivo se fosse positivo (fino a 90 gradi) o negativo (idem) poiché il coseno è simmetrico intorno a 0.
Se questo è il caso, allora invece di utilizzare la normale del piano, utilizzare la direzione del piano stesso e sottrai 90 gradi dall'angolo, quindi da 0 a 180 diventerebbe da -90 a +90 gradi (o da-metà PI a + metà PI se sei radialmente inclinato).


Bene, considera questo caso: x + ve ha ragione, y + ive è giù; Vettore di superficie S = (1,0); abbiamo due vettori di velocità di impatto V1 = (3,4) che colpisce dall'alto, dovrebbe ruotare la palla in senso orario e V2 = (3, -4) colpendo dal basso, dovrebbe ruotare la palla in senso antiorario. Ora le normali per entrambi i vettori sarebbero rispettivamente (3 / 5,4 / 5) e (3/5, -4 / 5). Ora il prodotto punto per entrambi i vettori sarebbe 3/5. l'angolo generato sarebbe arccos (3/5) = 53 gradi per ENTRAMBI i vettori. È vero, ma dai lati opposti! quindi se uso questo metodo, finirò comunque per causare una rotazione in senso orario. Vedi il mio dilema?
codemonkey

3 possibili soluzioni. 1) Non usare la normale ma la direzione del lato e sottrarre 90 gradi come indicato sopra. 2) Simula lo stesso scambiando xey di quello normale e invertendolo (moltiplicando per -1). 3) Moltiplicare l'angolo con il segno del prodotto incrociato dei due vettori poiché il prodotto incrociato rappresenta il peccato dell'angolo che non è simmetrico intorno a 0 gradi.
Kaj,

Il prodotto punto non ti dà l'angolo, solo la grandezza dell'angolo, hai anche bisogno della direzione dell'angolo. Tutti e 3 i modi sopra simulano usando il seno dandoti il ​​lato. Puoi anche usare il trig di base per ottenere l'angolazione. Sin (alfa) = lunghezza del lato opposto / lunghezza del lato inclinato (basato su un triangolo con un angolo di 90 gradi tra il lato opposto e il lato inclinato). Quello e Pitagora per calcolare la lunghezza dei lati andranno bene.
Kaj,

A proposito, rileggi la mia risposta originale, poiché risolve il dilemma prendendo l'angolo con il piano anziché il normale e sottraendo 90 gradi.
Kaj,

0

La prima cosa che devi affrontare è la velocità di rotazione o la rotazione prima di colpire il muro; diciamo Si; è maggiore, uguale o inferiore al valore necessario per mantenere la stessa rotazione dopo aver colpito, diciamo Ss. Con questo puoi ottenere l'effettivo dopo aver colpito la rotazione, diciamo Se, usando un valore di attrito tra la palla e la superficie

Ottieni la componente di velocità attraverso la superficie che rimbalza Vxi = Vi punto Vx, essendo Vx un vettore parallelo alla superficie con magnitudine 1.

Il valore che stai cercando è Ss = Vxi / r, questo per trasformare Vxi in velocità angolare. Se Si è inferiore a Ss, la palla dovrebbe ottenere una rotazione positiva. Se Si è uguale a Ss la palla dovrebbe mantenere approssimativamente lo stesso giro, a questo proposito in seguito. Se Si è maggiore di Ss la palla dovrebbe perdere la rotazione

la perdita e il guadagno di velocità dipendono dal valore di attrito p. In realtà è un incrocio tra il raggio e la sua forza di attrito, ma puoi impostare quel valore come desideri.

Dovresti anche notare che oltre al rimbalzo, la palla perde energia a causa di un attrito tra la palla e la superficie, quindi Vxi è influenzato negativamente. Direi che il rimbalzo coef influenza Vy e l'attrito influenza Vx.

Dovresti prendere in considerazione la deformazione della palla. Ciò influirà sul tempo o sui fotogrammi in cui la palla è attaccata al muro, quindi la forza di attrito eserciterà per un tempo più lungo influenzando la velocità di rotazione e di uscita. Questa deformazione dipende da come vuoi che sia il tuo modello.

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.