/** An oval track: two straights of `straight` metres joined by two semicircles whose kerb radius is `radius` (Manual 2.2.1.1; Technical Rule 14.1). */ export interface Oval { /** The length of each straight, which is also the distance between the centres of the semicircles. */ straight: number; /** The radius of the semicircles at the kerb: the track's inside edge. */ radius: number; /** The width of a lane, the 50 mm line on its right included (Rule 14.4). */ lane: number; /** How many lanes the oval has. */ lanes: number; /** The width of the lines. */ line: number; /** Where the running line is measured: lane 1's from the kerb, every other lane's from the outer edge of the line on its left (Rule 14.2). */ inner: number; outer: number; } /** A point on the track and the way the athlete is facing there (radians, clockwise from the right, as the eye sees it: 0 faces right, π/2 down). */ export interface Pose { x: number; y: number; heading: number; } /** The radius of lane `n`'s running line (Rule 14.2, Manual 2.2.1.1): the kerb radius and 0.30 m for lane 1, and 0.20 m outside the line on the left for the others. */ export declare const laneRadius: (o: Oval, n: number) => number; /** The radius of the outer edge of lane `n`'s line. */ export declare const laneEdge: (o: Oval, n: number) => number; /** The length of lane `n`'s running line: one lap. */ export declare const lap: (o: Oval, n: number) => number; /** A point on the running line of radius `r`, `s` metres from the finish line. A distance beyond a lap goes round again. */ export declare function pose(o: Oval, r: number, s: number): Pose; /** The staggered start of a lane: how far ahead of lane 1's start line it is, for a race run in lanes round `bends` bends, `bends` half-turns of π(r - r₁) each (Manual Table 2.2.1.6a). */ export declare function stagger(o: Oval, n: number, bends: number): number; /** The distance along the running line of radius `r` from the finish line of the point of it nearest to (x, y): the inverse of `pose`. */ export declare function distanceOn(o: Oval, r: number, x: number, y: number): number; /** The bend the athletes run: `right` is the first, round CP2, and `left` the second, round CP1. */ type Side = "right" | "left"; /** The point of a bend's running line at the angle `f` (radians from the bend's entry), with the way the athlete faces. */ export declare function bendPoint(o: Oval, side: Side, r: number, f: number): Pose; /** * A point of an involute of the lane-1 running circle of a bend: the curve a tight wire makes when it is unwound from the pins round the kerb, which is how the Manual has the * start lines and the breakline marked (2.2.1.6, "Marking for Curved Start Lines" and "Marking for the 800m Breakline"). Every point of it is the same distance from the finish by * the shortest permitted route: a straight line to the circle and then round it. `wire` is the length of the wire already unwound where it touches the circle at the bend's entry * (0 for a start on the bend, the distance back along the straight for one before it, 84.39 m for the 800 m breakline), and `f` the angle of the tangent point from the entry. */ export declare function involutePoint(o: Oval, side: Side, a: number, wire: number, f: number): [number, number]; /** * The start of a race of `distance` metres run in lanes' own staggers, and the breakline of the 800 m: the stagger of lane `n` over lane 1's, from the involute of the breakline * (Manual Tables 2.2.1.6a and 2.2.1.6b). The breakline is the involute of lane 1's second-bend circle through the end of the first bend; a lane's runner is equal to lane 1's when * the lane's run to the breakline is one semicircle of lane 1's length. */ export declare function breaklineStagger(o: Oval, n: number): number; /** The path of an arc of the circle (cx, cy, r) from the heading-free angle `a0` to `a1` (radians clockwise from the right as the eye sees it, y down). */ export declare function arcD(cx: number, cy: number, r: number, a0: number, a1: number): string; export {};