 (defn make-field
   "Create sampled vector field using provided noise function and scales."
   ([noise-fn ^double sx ^double sy]
-   (vec (for [^int i (range cols)]
-          (vec (for [^int j (range rows)]
-                 (let [theta (* m/TWO_PI ^double (noise-fn (* i sx) (* j sy)))]
-                   (Vec2. (m/cos theta) (m/sin theta))))))))
+   (let [^double field-shift-x (r/drand -2 2)
+         ^double field-shift-y (r/drand -2 2)]
+     (vec (for [^int i (range cols)]
+            (vec (for [^int j (range rows)]
+                   (let [theta (* m/TWO_PI ^double (noise-fn (+ field-shift-x (* i sx))
+                                                             (+ field-shift-y (* j sy))))]
+                     (Vec2. (m/cos theta) (m/sin theta)))))))))
   ([] (make-field (j/make-random-fractal-noise) (r/drand 0.005 0.1) (r/drand 0.005 0.1))))
 
 (defn lookup-field

(defn draw
  "Draw on canvas"
  [canvas _ _ state]
  (let [vehicles (or state (repeatedly 120 make-vehicle))]
    (-> canvas
        (set-background :linen)
        (set-color :black 100)

                                                    (translate x y)
                                                    (rotate (v/heading v))
                                                    (line 0 0 (/ resolution 1.5) 0)
                                                    (ellipse 0 0 3 3)
                                                    (pop-matrix)))) vv))) field))
  canvas)

(deftype Vehicle [position
                  velocity
