JavaScript:
1
2
3
4
5
| SomeThing.prototype.updateBall = function(delta) { this.ball.x += delta / 1000 * this.ball.speed * Math.cos(this.ball.angle); this.ball.y += delta / 1000 * this.ball.speed * Math.sin(this.ball.angle); // ??? }; |
Ik heb een balletje genaamd this.ball met de (enigszins vanzelfsprekende) eigenschappen x, y, speed en angle. Dit balletje verplaatst zich binnen een vierkante "kamer" van x -1 tot 1 en y -1 tot 1. Ik wil dat als het balletje één van de muren raakt (aka zijn x/y coords vallen buiten -1 en 1) de bal "afkaatst": De hoek moet dan veranderen in een gespiegelde versie ten opzichte van de muur die-ie geraakt heeft.
Ik zoek een makkelijke manier om de hoek na het afkaatsen te berekenen.
Ik heb zelf ongeveer deze berekening bedacht: (voor het gemak in graden ipv radians)
JavaScript:
1
2
3
4
5
| // `angle` is bijv. 80, waarbij de bal snel omhoog en lichtelijk naar rechts verplaatst var TOP_WALL_ANGLE = 270; // de hoek haaks op de bovenste muur var mirroredAngle = (angle + 180) % 360; // 260 var angleDifference = TOP_WALL_ANGLE - mirroredAngle; var newAngle = mirroredAngle + angleDifference * 2; |
Alleen zou ik deze berekening dan voor alle 4 "muren" apart moeten maken. Ik twijfel sterk of dit niet makkelijker kan, dus daarom vraag ik het hier.
Let op: Mijn post bevat meningen, aannames of onwaarheden
