import { Angle } from "../../geometry3d/Angle";
/**
 * A true transition spiral is a curve defined by its curvature, with the curvature function symmetric about midpoint.
 * * The symmetry condition creates a relationship among the following 4 quantities:
 * ** curvature0 = curvature (i.e. 1/radius) at start.
 * ** curvature1 = curvature (i.e. 1/radius) at end.
 * ** sweepRadians = signed turning angle from start to end.
 * ** arcLength = length of curve.
 * * The relationship is the equation:
 * ** `sweepRadians = arcLength * average Curvature = arcLength * 0.5 * (curvature0 + curvature1)`
 * * That is, regardless of any curvature properties other than symmetry, specifying any 3 of the quantities fully
 * determines the remaining one.
 * @public
 */
export declare class TransitionConditionalProperties {
    /**
     * Radius at start (radius of the osculating circle at the spiral segment's start).
     * radius0 === 0 means straight line at start.
     */
    radius0: number | undefined;
    /**
     * Radius at end (radius of the osculating circle at the spiral segment's end).
     * radius1 === 0 means straight line at end.
     */
    radius1: number | undefined;
    /**
     * Bearing at start (the signed angle from global x-axis to the start tangent of the spiral).
     * * If the direction from x-axis to start tangent is CCW, the start bearing is positive.
     */
    bearing0: Angle | undefined;
    /**
     * Bearing at end (the signed angle from global x-axis to the end tangent of the spiral).
     * * If the direction from x-axis to end tangent is CCW, the end bearing is positive.
     */
    bearing1: Angle | undefined;
    /** Curve length. */
    curveLength: number | undefined;
    /**
     * Capture numeric or undefined values.
     * @param radius0 start radius or undefined.
     * @param radius1 end radius or undefined.
     * @param bearing0 start bearing or undefined.
     * @param bearing1 end bearing or undefined.
     * @param arcLength arc length or undefined.
     */
    constructor(radius0: number | undefined, radius1: number | undefined, bearing0: Angle | undefined, bearing1: Angle | undefined, arcLength: number | undefined);
    /** Return the number of defined values among the 5 properties. */
    numDefinedProperties(): number;
    /** Clone with all 5 properties (i.e., preserve undefined states). */
    clone(): TransitionConditionalProperties;
    /** Return true if all 5 properties are defined and agree equationally. */
    getIsValidCompleteSet(): boolean;
    /**
     * Examine which properties are defined and compute the (single) undefined.
     * @returns true if the input state had precisely one undefined member.
     */
    tryResolveAnySingleUnknown(): boolean;
    private almostEqualCoordinate;
    private almostEqualBearing;
    /** Test if `this` and `other` have matching numeric and undefined members. */
    isAlmostEqual(other?: TransitionConditionalProperties): boolean;
    /** Apply a NONZERO scale factor to all distances. If `a` is zero, do nothing. */
    applyScaleFactor(a: number): void;
    /** Test if `a` and `b` have matching numeric and undefined members. */
    static areAlmostEqual(a: TransitionConditionalProperties | undefined, b: TransitionConditionalProperties | undefined): boolean;
}
//# sourceMappingURL=TransitionConditionalProperties.d.ts.map