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)
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!
Grazie per la risposta Gilbert. Ho aggiornato il mio disegno sopra ... è corretto? – Growler
@Growler: Sì, theta è l'angolo che stai calcolando. –
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