Skip to content

Commit

Permalink
direction-from-a-to-b same as angle-between
Browse files Browse the repository at this point in the history
  • Loading branch information
ericclack committed May 24, 2018
1 parent db54760 commit a43bcca
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 26 deletions.
18 changes: 7 additions & 11 deletions 2d-tests.rkt
Expand Up @@ -9,6 +9,13 @@
90 0.01)
(check-= (angle-between (pos 100 100) (pos 150 150))
45 0.01)
(check-= (angle-between (pos 0 0) (pos 50 50))
45 0.01)
(check-= (angle-between (pos 0 0) (pos 0 50))
90 0.01)
(check-= (angle-between (pos 0 0) (pos -50 -50))
-135 0.01)

(check-= (distance-between (pos 100 100) (pos 200 100))
100 0.01)
(check-= (distance-between (pos 0 0) (pos 100 100))
Expand All @@ -35,17 +42,6 @@
(check-false (inside-rect? (pos 100 0) (pos 95 1000) (pos 101 100)))
)

(test-case
"tests for direction-from-a-to-b"
(check-= (direction-from-a-to-b (pos 0 0) (pos 50 50))
45 0.01)
(check-= (direction-from-a-to-b (pos 0 0) (pos 0 50))
90 0.01)
(check-= (direction-from-a-to-b (pos 0 0) (pos -50 -50))
-135 0.01)

)

(test-case
"tests for inside triangle"
(check-true (inside-triangle? (list (pos 0 0) (pos 100 100) (pos 5 50))
Expand Down
22 changes: 7 additions & 15 deletions 2d.rkt
Expand Up @@ -68,21 +68,14 @@
(and (between? (pos-x a-pos) (pos-x rpos1) (pos-x rpos2))
(between? (pos-y a-pos) (pos-y rpos1) (pos-y rpos2))))

(define (direction-from-a-to-b pos1 pos2)
"What's the direction/bearing from pos1 to pos2?"
(let ([vector (pos (- (pos-x pos2) (pos-x pos1))
(- (pos-y pos2) (pos-y pos1)))])
(radians->degrees
(atan (pos-y vector) (pos-x vector)))))

(define (inside-triangle? points a-pos)
"Is a-pos inside this triangle defined by the 3 points?"
(let* ([angle1-2 (direction-from-a-to-b (first points) (second points))]
[angle1-3 (direction-from-a-to-b (first points) (third points))]
[angle1-a (direction-from-a-to-b (first points) a-pos)]
[angle2-1 (direction-from-a-to-b (second points) (first points))]
[angle2-3 (direction-from-a-to-b (second points) (third points))]
[angle2-a (direction-from-a-to-b (second points) a-pos)])
(let* ([angle1-2 (angle-between (first points) (second points))]
[angle1-3 (angle-between (first points) (third points))]
[angle1-a (angle-between (first points) a-pos)]
[angle2-1 (angle-between (second points) (first points))]
[angle2-3 (angle-between (second points) (third points))]
[angle2-a (angle-between (second points) a-pos)])
(and (between? angle1-a angle1-2 angle1-3)
(between? angle2-a angle2-1 angle2-3))))

Expand All @@ -91,5 +84,4 @@
(provide pos pos-x pos-y pos->posn
move-pos add-direction-speeds angle-between distance-between
points-around-centre
between? inside-circle? inside-rect? inside-triangle?
direction-from-a-to-b)
between? inside-circle? inside-rect? inside-triangle?)

0 comments on commit a43bcca

Please sign in to comment.