2013-07-26 11 views
5

Sto provando a far rimbalzare una palla intorno a una finestra. A seconda di quanto lontano la palla colpisce il muro e in quale angolo determinerà il suo riflesso. Puoi vedere nella foto che la traiettoria nera colpisce la parete opposta nella metà interna ... e la traiettoria grigia rappresenta se dovesse riflettere e colpire l'altra metà ... il che diminuirebbe l'angolo di riflessione.Angoli casuali di una palla che rimbalza

Non sono sicuro che ci sto pensando correttamente ... Sto cercando di mettere le coordinate in termini di gradi.

Quindi, dato il pic ... Si potrebbe prendere quelle delta, quindi ottenere gradi ...

gradi = Math.atan2 (opposto/adiacente) = (-4/-2)

enter image description here

il mio codice

public class Calculate { 

public Calculate() { 
    System.out.println(getCalc(7,5,4,0));  
} 

public double getCalc(int x1, int x2, int y1, int y2) { 
    double deltaX = Math.abs(x2-x1); 
    double deltaY = Math.abs(y2-y1); 
    double degrees = Math.toDegrees((java.lang.Math.atan2(deltaX, deltaY))); 

    return degrees; 
} 

}

Dà l'output: 26.56505117707799

Così ora so che la palla si rifletterà sul muro a 26 gradi (poiché questo è l'angolo di incidenza). Ma non voglio che la palla rifletta necessariamente in modo uniforme su ogni parete, quindi aggiunge variabilità.

Le mie domande:

  • Am I calcolare correttamente l'angolazione della palla?
  • Come posso aggiungere variabilità al bounce in base a dove colpisce il muro?
  • Una volta ottenuto l'angolo in gradi, come posso riportarlo alle coordinate?

Grazie!

risposta

2

Sto calcolando correttamente l'angolo della sfera?

Il disegno non è in scala. I 26 gradi sono misurati da una linea perpendicolare al muro.

Come posso aggiungere variabilità al bounce in base a dove colpisce sul muro?

Hai già suggerito un angolo casuale. È inoltre possibile regolare l'angolo di riflessione in base alla distanza dal centro del muro.

Metti il ​​calcolo del tuo angolo di riflessione nel suo metodo. È possibile regolare il calcolo fino a quando i calcoli non ti danno la "casualità" che stai cercando.

Una volta ottenuto l'angolo in gradi, come posso riportarlo in coordinate?

Convertire i gradi in radianti, quindi calcolare il SAS of the triangle. Lasciate semplicemente i vostri angoli in radianti nel modello e convertite in gradi nei metodi di visualizzazione/diagnostica.

+0

Grazie per la risposta Gilbert. Ho aggiornato il mio disegno sopra ... è corretto? – Growler

+0

@Growler: Sì, theta è l'angolo che stai calcolando. –

+0

Intendevo, una volta ottenuto l'angolo in gradi ... Sto cercando come ottenere i nuovi valori incrementali che rappresentano quell'angolo (non necessariamente i lati come mostra il collegamento usando SAS). Come in .. cosa è 'newVal' in' x + = newVal; 'e' y + = newVal' per gli incrementi di xey? – Growler

1

Penso che la distanza della palla dalla superficie non abbia realmente un effetto sull'angolo. L'angolo della palla prima di colpire la superficie dovrebbe essere lo stesso (riflesso speculare) quando lascia la superficie perché sia ​​naturale.

È possibile aggiungere una certa variabilità pensando a cosa succede a una palla di gomma, poiché cambia un po 'all'impatto a seconda della forza, ecc., Il riflesso non è esattamente lo stesso ogni volta. Potresti semplicemente aggiungere o rimuovere un grado o due a caso e vedere come va.

Una volta che si ha un angolo, è ancora una volta giù fino alla trigonometria. Hai un angolo e conosci l'ipotenusa (presumo che, a seconda della frequenza del fotogramma e della velocità della palla, la palla avrebbe percorso una certa quantità dalla superficie). Quindi da ciò è necessario ottenere le linee adiacenti e opposte del triangolo.

Ad esempio:

sin(angle) * hypothenuse = opposite (so Y offset from the surface).

cos(angle) * hypothenuse = adjacent (so X offset from the point of contact).

Basta aggiungere o rimuovere (a seconda della direzione) i valori adiacenti e opposte dalle coordinate del punto di contatto.

1

Se vuoi sembrare un po 'casuale, puoi modellare lo spin in qualche modo - non deve essere troppo complicato.

Se non ruotava e colpiva un muro con un angolo di 45 gradi, avrebbe impartito una rotazione alla palla. Quando ha colpito il muro successivo, lo spin si aggiungeva all'angolo e la rotazione veniva aumentata (o diminuita) dall'angolo. Penso che la combinazione spin/angolo influenzi anche la velocità con cui viene fuori dal muro (Visualizzazione di situazioni reali)

Questo lo farebbe variare senza che sia veramente casuale - ma non so come sembrerebbe davvero - potrebbe essere necessario applicare altre restrizioni (penso che ci debba essere un modo per limitare la rotazione massima).

Scommetto che c'è un semplice libro di fisica in giro che potrebbe dare abbastanza per modellarlo senza andare troppo in profondità se non volessi semplicemente creare delle regole.

Problemi correlati