PasteRack.org
Paste # 78289
2014-09-28 02:13:09

Fork as a new paste.

Paste viewed 62 times.


Embed:

  1. #lang racket
  2.  
  3. (struct point (x y))
  4. (struct triangle (p1 p2 p3))
  5.  
  6. ; triangle point -> boolean
  7. (define (triangle-contains-point? triangle point)
  8.   (define (sign p1 p2 p3)
  9.     (- (* (- (point-x p1)
  10.              (point-x p3))
  11.           (- (point-y p2)
  12.              (point-y p3)))
  13.        (* (- (point-x p2)
  14.              (point-x p3))
  15.           (- (point-y p1)
  16.              (point-y p3)))))
  17.   (define b1 (< (sign point (triangle-p1 triangle) (triangle-p2 triangle)) 0))
  18.   (define b2 (< (sign point (triangle-p2 triangle) (triangle-p3 triangle)) 0))
  19.   (define b3 (< (sign point (triangle-p3 triangle) (triangle-p1 triangle)) 0))
  20.   (and (eq? b1 b2)
  21.        (eq? b2 b3)))
  22.  
  23.  
  24. (define tri (triangle (point 0 0)
  25.                       (point 5 0)
  26.                       (point 0 5)))
  27.  
  28. (triangle-contains-point? tri (point 0 0))
  29. (triangle-contains-point? tri (point 1 1))
  30. (triangle-contains-point? tri (point 5 5))

=>

#t

#t

#f