une boule est contre une paroie. elle vient de percuter la paroie.
cette fonction va lui permettre de rebondir
dite moi si je suis sure la bonne voie svp
(define (rebond B i monde) ;comportement d'une balle après un choc avec la paroi
(let* (
(x (BALLE-x B))
(y (BALLE-y B))
(vx (BALLE-vx B))
(vy (BALLE-vy B))
(alpha (atan (/ (abs y) (abs x))))
(betta (atan (/ (abs vy) (abs vx)))))
;(set! alpha (/ (* alpha pi) 180))
;(set! betta (/ (* betta pi) 180))
(cond ((and (< x 0) (> y 0)) (set! alpha (+ pi alpha)))
((and (< x 0) (< y 0)) (set! alpha (- pi alpha)))
((and (> x 0) (< y 0)) (set! alpha (- alpha))))
(cond ((and (< vx 0) (> vy 0)) (set! betta (+ pi betta)))
((and (< vx 0) (< vy 0)) (set! betta (- pi betta)))
((and (> vx 0) (< vy 0)) (set! betta (- betta))))
(let ((angle (- betta alpha))
;(angle (- alpha betta ))
(a (+ vx x))
(b (+ vy y)))
(if (< angle 0) (begin (set! a (+ x (- (* (cos (- (* 2 angle) pi)) a)
(* (sin (- (* 2 angle) pi)) b))))
(set! b (+ y (+ (* (sin (- (* 2 angle) pi)) (+ x vx))
(* (cos (- (* 2 angle) pi)) b)))))
(begin (set! a (+ x (- (* (cos (+ pi (* 2 angle))) a)
(* (sin (+ pi (* 2 angle))) b))))
(set! b (+ y (+ (* (sin (+ pi (* 2 angle))) (+ x vx))
(* (cos (+ pi (* 2 angle))) b))))))
(set! vx (- a x))
(set! vy (- b y))
(let ((boule (make-BALLE a b vx vy (BALLE-c B) #f)))
(set-BALLE-vy! boule (- vy))
(rep_scheme boule)
(vector-set! monde i boule)))))
Partager