jamshred: collision detection better, bounce still buggy

db4
Alex Chapman 2008-05-08 12:17:05 +10:00
parent 02b744f09a
commit ea2107e463
1 changed files with 6 additions and 17 deletions

View File

@ -114,21 +114,11 @@ C: <segment> segment
: fraction-from-wall ( seg loc -- fraction )
fraction-from-centre 1 swap - ;
: distant 10 ; inline
:: (collision-coefficient) ( -b sqrt(b^2-4ac) 2a -- c )
sqrt(b^2-4ac) complex? [
distant
] [
-b sqrt(b^2-4ac) + 2a /
-b sqrt(b^2-4ac) - 2a / max ! the -ve answer is behind us
] if ;
:: collision-coefficient ( v w -- c )
:: collision-coefficient ( v w r -- c )
[let* | a [ v dup v. ]
b [ v w v. 2 * ]
c [ w dup v. v dup v. - ] |
c b a quadratic [ real-part ] bi@ max ] ;
c [ w dup v. r sq - ] |
c b a quadratic max ] ;
: sideways-heading ( oint segment -- v )
[ forward>> ] bi@ proj-perp ;
@ -137,12 +127,11 @@ C: <segment> segment
[ [ location>> ] bi@ v- ] keep forward>> proj-perp ;
: collision-vector ( oint segment -- v )
dupd [ sideways-heading ] [ sideways-relative-location ] 2bi
collision-coefficient swap forward>> n*v ;
[ sideways-heading ] [ sideways-relative-location ] [ radius>> ] 2tri
swap [ collision-coefficient ] dip forward>> n*v ;
USING: prettyprint jamshred.log io.streams.string ;
: distance-to-collision ( oint segment -- distance )
collision-vector norm [ dup . ] with-string-writer jamshred-log ;
collision-vector norm ;
: bounce-forward ( segment oint -- )
[ wall-normal ] [ forward>> swap reflect ] [ (>>forward) ] tri ;