Every number on the chart comes from a short list of formulas. Some are published ocean research. Some are choices we made so a kelp paddy, a plank, and a skiff do not all drift like the same box.
An orange tag is a published result we implemented. A plain tag is a choice inside the app. The phone runs the same math with or without a signal, once the wind and current grid is on the device.
Published
Wind and current have to balance
A floating object speeds up until the push from the wind equals the drag of the water. Seawater is about 800 times denser than air, so the object travels almost with the current. The wind still gets a vote. That vote is the leeway coefficient, written γ (gamma).
Drag the leeway. A 6 knot wind across a 1.2 knot current barely moves kelp. At 3.2% the skiff’s extra vote shows up in the zoom, still a small slice of the current.
Wagner, Eisenman, Ceroli, and Constantinou worked out the steady balance in 2022 and checked it in a flume with objects of different shapes and densities. For a wide range of real floating things, γ lands near 2% to 4%. The reason is simple: γ starts from the square root of the air-to-water density ratio, which is about 3.5%. Shape moves it a little from there. We use their balance. We did not repeat the tank tests.
v = (vwater + γ vwind) / (1 + γ)γ = √(ρair / ρwater) × √( (b Cair + l cair) / (d Cwater + l cwater) )
v is the object’s drift. vwater is the current. vwind is the wind. b is freeboard, d is draft, l is length. ρair = 1.225 kg/m³. ρwater = 1025 kg/m³. Frontal drag C = 1. Side drag c = 0.005. γ is capped at 0.20.
Read the first line as a blend. The current is weighted by 1, the wind by γ, and the total is divided by 1 + γ so a strong wind cannot invent speed the drag balance does not allow. For a small γ, the wind’s share is about γ times the wind speed, and the object still takes nearly all of the current.
A 17 ft skiff, sitting with 46% of its hull height in the air, comes out to γ = 0.032. In a 10 knot wind and no current, the skiff drifts at 0.31 knot downwind. The same wind on a kelp at γ = 0.008 is 0.08 knot.
Wagner, T. J. W., I. Eisenman, A. M. Ceroli, and N. C. Constantinou, 2022: How winds and ocean currents influence the drift of floating objects. Journal of Physical Oceanography, 52, 907–916. doi:10.1175/JPO-D-20-0275.1
In the app
Kelp, debris, and a hull
The Wagner balance needs a freeboard, a draft, and a length. A saved boat has those. Kelp and debris do not, so they use a fixed starting γ, then a gentle size curve.
The waterline is the same. Kelp is almost all draft. The skiff shows more hull to the wind, which is why its leeway sits on the 2–4% rule of thumb.
Kelp, 15 ft reference: γ = 0.008Debris, 6 ft reference: γ = 0.015High-freeboard skiff: γ = 0.032γ = γreference × (size / sizereference)0.35
The size curve stays between 0.6 and 1.8 times the reference. Kelp size runs 3–80 ft. Debris runs 1–40 ft.
A paddy is mostly underwater, so 0.8% of the wind is a low-freeboard choice, well under the 2–4% band in the paper. Debris has a bit more sail area. A skiff at 3.2% sits on the published rule of thumb. Bigger kelp and debris catch a little more wind. The 0.35 power keeps a paddy that is twice as wide from drifting twice as fast.
A 40 ft kelp against the 15 ft reference is (40 / 15)0.35 ≈ 1.41, so γ rises from 0.8% to about 1.1%.
Shape is a separate choice for kelp. A round paddy uses the size curve above and no extra crosswind. A long paddy, a windrow, uses 1.25 times that γ downwind. It also takes a crosswind leeway equal to the round γ. Half the particles yaw left of the wind and half yaw right, because a mat in the water does not hold one heading. The search opens across the wind instead of sliding down it in a line.
A boat uses the Wagner shape formula directly. Hull height in meters is 0.43 + 0.06 × length, held between 0.55 m and 2.2 m. Immersion 0 is awash. Immersion 1 sits high. Draft is the underwater share of that height, and freeboard is the rest. The built-in boats are a 12 ft kayak, a 17 ft skiff, a 23 ft console, a 28 ft cabin, and a 42 ft sportfisher. A custom slider is the same γ, typed in by hand.
PublishedIn the app
The swell carries a little water with it
Waves do not only go up and down. Over a wave cycle, the water itself creeps in the direction the swell is traveling. That creep is Stokes drift. The leeway balance above does not include it, so the phone adds it afterward.
A particle on the wave does not come back to the same spot. Kelp takes the whole leftover. A skiff takes about a third of it.
For a narrow deep-water swell, the surface speed is the classical Stokes result: amplitude squared, times frequency cubed, divided by gravity. We take the amplitude as half the swell height.
ω = 2π / TUs = Hs2 × ω3 / (4 g)
Hs is swell height in meters. T is the period in seconds. g = 9.80665 m/s². The vector points where the waves are going, opposite the forecast’s “from” direction. Us is then multiplied by an exposure share.
Speed grows with the square of the height and the cube of the frequency. A short, steep swell moves more water than a long groundswell of the same height. The fallback swell, used when the forecast has no swell, is a Southern California groundswell: 1.2 m, 12 seconds, from 300° (west-northwest). That particular sea is only about 0.01 knot of surface Stokes drift.
Exposure is our choice for how much of that surface creep the object actually feels. Kelp sits in the wave zone, so it takes all of it. Debris takes 65%. A skiff’s drift is mostly windage, so it takes 35%. Any other boat is blended from 100% down to 35% as its leeway runs from 0.8% to 3.2%.
The speed formula is the deep-water Stokes drift of a single wave, with amplitude Hs / 2. Stokes, G. G., 1847: On the theory of oscillatory waves. Transactions of the Cambridge Philosophical Society, 8, 441–455.
PublishedIn the app
The outline is a cloud of pins, not one line
A single perfect path would be a lie. The wind, the current, and the swell are estimates, and a real paddy wanders. The phone drops 150 particles on the mark and steps them forward together. The outline you see is the smallest shape that wraps every particle that is still in the water.
Every particle shares the Wagner drift. The 0.05 m/s wobble is why they don’t stay on one line. The orange wrap is the search area for that hour.
v = Wagner balance + (exposure × Stokes) + noiseΔ north (m) = vnorth × 600 sΔ latitude = Δ north / R × (180 / π)Δ longitude = Δ east / (R cos latitude) × (180 / π)
R = 6,371,000 m. Each step is 10 minutes. The run goes 24 hours back and 48 hours ahead. A new outline is saved every hour. Noise is a normal draw with standard deviation 0.05 m/s, separate in east and north. That is the Box–Muller method.
This is Euler’s method: use the velocity at the start of the step, move in a straight line for 10 minutes, then look up a new velocity. The backward hours use the same step with the sign flipped, so the scrubber can show where the object likely was before you marked it.
The 0.05 m/s wobble is about 0.1 knot. It is there so the cloud opens into a search area. It is not a measured turbulence spectrum. The wrap around the particles is a convex hull. If a step would cross onto land, the particle stops at the shoreline. The drawn outline then has the land cut out of it, so the search area stays in the water.
Two tighter wraps sit inside that outline. The darkest holds the densest half of the particles. The middle wrap holds the densest 90 percent. The pale outer wrap is the whole cloud, the water to search.
Each step reads the wind, current, and swell saved for that time. Dock sync replaces that grid. A newer grid, or Update drift on the pin, runs the particles again. Hours the new grid covers replace the old outline. Hours it does not cover stay as they were.
In the app
Wind and current at a point that is not on the grid
Dock sync saves wind, ocean current, swell, and sea level from Open-Meteo on a latitude, longitude, and time grid. A particle is almost never exactly on a grid point, and the scrubber is almost never exactly on a saved hour. The phone blends the surrounding values.
The four saved values are the corners. The sample is a blend by how far it sits between them, in longitude and then in latitude. Time works the same way between saved hours.
Along a line: (1 − t) × A + t × BOn the map: blend the east pair, blend the west pair, then blend those two with latitude.
The same blend runs through time, between the saved hours. Wind is the 10 m wind. Current is the ocean-current vector. Swell is height, period, and the direction it comes from.
Before a grid is on the phone, the stand-in is a California Current-like southward flow, a northwest breeze, and the 1.2 m groundswell above. It is a placeholder so the chart can still draw a drift. It is not a forecast.
PublishedIn the app
Bearing and range to the search area
The intercept card is the course from the boat to the middle of the search area, and the distance in nautical miles. The middle is the average of the outline’s corners that are still offshore. Distance is the haversine formula on a sphere. Bearing is the initial great-circle course.
Range is the great-circle distance. The bearing is the initial course, then the phone subtracts 13° to read it in magnetic degrees.
a = sin²(Δφ / 2) + cos φ₁ cos φ₂ sin²(Δλ / 2)distance = 2 R atan2(√a, √(1 − a))θ = atan2( sin Δλ cos φ₂ , cos φ₁ sin φ₂ − sin φ₁ cos φ₂ cos Δλ )magnetic = true − variation
φ is latitude, λ is longitude, in radians. R = 6,371 km. One nautical mile is 1,852 m. Variation defaults to 13° east, so a true course of 040° is read as 027° magnetic.
Thirteen degrees east is a working west-coast variation, not a world magnetic model. It is the number the phone uses until a local variation is wired in. The same sphere and the same 13° are used when the chart turns a current vector into knots and a magnetic direction.
In the app
Where to start a deep drop
The bait should arrive on the target. While it sinks, the boat and the water carry it sideways, so the start spot sits up-drift of the mark. Sink time comes from weight and bait size. Sideways travel is that time times the drift.
Put the boat up-drift. The bait falls for depth ÷ sink rate, and rides the drift for that many seconds, so it arrives on the target.
sink (ft/s) = (1.5 + 0.85 × weight in oz) × dragdrag = 1 small, 0.72 medium, 0.50 largefall seconds = depth in feet / sinkoffset = drift speed × fall seconds
Depth is kept between 20 and 4,000 ft. Weight is kept between 1 and 48 oz. The start coordinate is one offset up-drift of the target, on the same sphere used for the intercept.
This sink rate is a fit we use in the app so a heavier bait falls faster and a larger bait falls slower. It is not a published terminal-velocity study. A tracked drift replaces the forecast when you have one: the phone watches the boat, turns that track into a speed and direction, and multiplies it by the new bait’s sink time. If the only track is an older timed fall, the sink is scaled by the new weight and size against the old ones.
A 16 oz medium bait sinks at about 10.9 ft/s. In 300 ft of water that is a 28 second fall. If the boat is drifting at 1 knot, the start spot is about 47 ft up-drift of the target.
With no track, the sideways drift is the boat’s Wagner balance of the local current and wind. The suggested track length is the time it takes the boat to move about 45 meters, held between 90 seconds and 6 minutes and rounded to the nearest half minute, so the sample is longer than GPS wander.
In the app
Scope, rode, and the swing circle
Scope is rode divided by depth. The boat finishes on the target, so the anchor goes in up-drift, and the rode is the long side of a right triangle. Depth is one leg. The horizontal set is the other.
Scope 4.5 means the rode is 4.5 times the depth. The flat leg of that triangle is how far up-drift the anchor goes in, and how wide the boat can swing.
rode = depth × scopeset = depth × √(scope² − 1)scope used = style scope + light penalty − chain credit
Scope stays between 3 and 12. Style starting points: fluke 7, plow 5, claw 5, grapnel 7, mushroom 4. A light anchor for the depth adds 1, or 2 if it is less than half the weight we want. Chain credit is chain length divided by depth, and it tops out at 2. The chain is the first part of the rode. The rest is line.
The weight we want for the depth is at least 8 lb, or about 1 lb for every 12 ft of water, whichever is more. Those style scopes are the usual cruising numbers for each anchor, not a new holding-power test. The swing circle is drawn with the set distance as its radius, around the drop point. Hang direction is the boat’s Wagner drift. If that drift is under about 0.06 knot, the phone uses the wind. If the wind is slack too, it hangs north.
Sixty feet of water, a plow at scope 5, a 35 lb anchor, and 30 ft of chain. The anchor is heavy enough, and the chain gives back half a scope, so the scope used is 4.5. Rode is 270 ft. The anchor goes in 263 ft up-drift, and that 263 ft is the swing radius.
PublishedIn the app
The curve under the scrubber
When a tide station or the saved sea-level series is on the phone, the curve is that series. Between two saved times the height is a straight blend. Highs and lows are the turning points in the window. Heights from a station are shown against mean lower low water. Heights from the saved forecast are against mean sea level. Feet are meters times 3.28084.
The curve is the saved tide. Between two saved times the phone does not follow the bend. It draws a straight line from one sample to the next. The stand-in, when nothing is saved, is one M2 wave of 12.42 hours.
height = left + (right − left) × (time − timeleft) / (timeright − timeleft)Stand-in: cos(2π × time / 12.4206 h)
12.4206 hours is the period of the principal lunar semidiurnal tide, called M2. The stand-in has a shape and a clock. It does not have a real height, so the readout stays blank until a station or a saved series is there.
In the app
Degrees and decimal minutes
The chart speaks the way a radio call does. Decimal degrees stay on the screen as a check. The call uses degrees and decimal minutes, with minutes to three places.
33.75112° is 33° plus 0.75112 of the next degree. That fraction times 60 is 45.067 minutes, so the radio call is 33°45.067' N.
degrees = the whole-number partminutes = (decimal degrees − degrees) × 60
33.75112° N is 33°45.067' N. Longitude uses three digits for the degrees, so 119° stays 119° and 9° is written 009°.
Speed on the chart is knots. One meter per second is 3600 / 1852 knots, about 1.944 knots. Distance is nautical miles. Bearings on the intercept card are magnetic degrees, using the 13° east variation above.
What this page is claiming
The leeway balance is Wagner and colleagues, 2022. The swell creep is Stokes, 1847, in the deep-water form. Distance and bearing are the standard sphere formulas. The M2 period is the known lunar tide.
The object percentages, the size power, the Stokes shares, the 0.05 m/s cloud, the sink fit, the anchor scope tweaks, and the fixed 13° variation are choices in RoguePin. They are written down here so you can see them. A later cloud run, if it ships, uses the same γ and the same Stokes add-on inside a higher-resolution ocean model. It does not replace these formulas.