Compare commits
2 Commits
b0bbb1fcdb
...
37c2786336
| Author | SHA1 | Date | |
|---|---|---|---|
| 37c2786336 | |||
| bcffe4e5bf |
@ -21,27 +21,28 @@
|
|||||||
last
|
last
|
||||||
(apply area))
|
(apply area))
|
||||||
|
|
||||||
;; wikipedia maths
|
|
||||||
(defn normalize [x] (min 1 (max -1 x)))
|
(defn normalize [x] (min 1 (max -1 x)))
|
||||||
(defn orientation
|
(defn orientation
|
||||||
"returns a value indicating if point A is to the left or right (or on) BC"
|
"returns a value indicating if point A is to the left, right, or on the line BC"
|
||||||
[[ax ay] [bx by] [cx cy]]
|
[[ax ay] [bx by] [cx cy]]
|
||||||
(normalize (- (* (- by ay) (- cx bx))
|
(normalize (- (* (- by ay) (- cx bx))
|
||||||
(* (- bx ax) (- cy by)))))
|
(* (- bx ax) (- cy by)))))
|
||||||
|
|
||||||
(defn intersect? [[ax ay] [bx by]]
|
(defn intersect?
|
||||||
(let [o1 (orientation ax ay bx)
|
"Lines AB and CD intersect if points A and B falls on different sides of CD
|
||||||
o2 (orientation ax ay by)
|
and if C and D fall on different sides of AB"
|
||||||
o3 (orientation bx by ax)
|
[[a b] [c d]]
|
||||||
o4 (orientation bx by ay)]
|
(let [o1 (orientation a b c)
|
||||||
|
o2 (orientation a b d)
|
||||||
|
o3 (orientation c d a)
|
||||||
|
o4 (orientation c d b)]
|
||||||
(and (not= o1 o2) (not= o3 o4))))
|
(and (not= o1 o2) (not= o3 o4))))
|
||||||
|
|
||||||
;; part 2
|
;; part 2
|
||||||
(def line-segments (map vector input (conj (vec (rest input)) (first input))))
|
(def line-segments (map vector input (conj (vec (rest input)) (first input))))
|
||||||
(->> furthest-points
|
(->> furthest-points
|
||||||
(filter (fn [[a b]]
|
(filter (fn [[a b]]
|
||||||
(let [segments (filter (fn [[seg-a seg-b]]
|
(let [segments (filter (fn [[seg-a seg-b]] (and (not= a seg-a)
|
||||||
(and (not= a seg-a)
|
|
||||||
(not= a seg-b)
|
(not= a seg-b)
|
||||||
(not= b seg-a)
|
(not= b seg-a)
|
||||||
(not= b seg-b)))
|
(not= b seg-b)))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user