import { Plane3dByOriginAndVectors } from "../../geometry3d/Plane3dByOriginAndVectors";
import { Point3d, Vector3d } from "../../geometry3d/Point3dVector3d";
import { Ray3d } from "../../geometry3d/Ray3d";
/**
 * XYCurveEvaluator is an abstract with methods for evaluating X and Y parts of a curve parameterized by a fraction.
 * * The required methods call for independent X and Y evaluation.
 * * Base class methods package those (multiple) calls into point, ray, and plane structures.
 *    * An implementation that has evaluation substantial cost that can be shared among x,y parts or between
 *      primary functions and derivatives might choose to implement the point and derivative methods directly.
 * @internal
 */
export declare abstract class XYCurveEvaluator {
    /** Return a deep copy of the evaluator. */
    abstract clone(): XYCurveEvaluator;
    /** Test for near identical evaluator. */
    abstract isAlmostEqual(other: any): boolean;
    /** Evaluate X at fractional position. */
    abstract fractionToX(fraction: number): number;
    /** Evaluate Y at fractional position. */
    abstract fractionToY(fraction: number): number;
    /** Evaluate derivative of X with respect to fraction at fractional position. */
    abstract fractionToDX(fraction: number): number;
    /** Evaluate derivative of Y with respect to fraction at fractional position. */
    abstract fractionToDY(fraction: number): number;
    /** Evaluate second derivative of X with respect to fraction at fractional position. */
    abstract fractionToDDX(fraction: number): number;
    /** Evaluate second derivative of Y with respect to fraction at fractional position. */
    abstract fractionToDDY(fraction: number): number;
    /** Evaluate third derivative of X with respect to fraction at fractional position. */
    abstract fractionToD3X(fraction: number): number;
    /** Evaluate third derivative of Y with respect to fraction at fractional position. */
    abstract fractionToD3Y(fraction: number): number;
    /** Evaluate both X and Y at fractional coordinate, return bundled as a point. */
    fractionToPoint(fraction: number, result?: Point3d): Point3d;
    /**
     * Evaluate both X and Y and their first derivatives at fractional coordinate, return bundled as origin and
     * (non-unit) direction vector.
     */
    fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d;
    /**
     * Evaluate both X and Y and their second derivatives at fractional coordinate, return bundled as origin and
     * (non-unit) vectorU an vectorV.
     */
    fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors;
    /**
     * Return the magnitude of the tangent vector at fraction.
     * @param fraction fractional position along the curve
     */
    fractionToTangentMagnitude(fraction: number): number;
    /** Invert the fractionToX function for given X. */
    abstract xToFraction(x: number): number | undefined;
    protected static _gaussX: Float64Array;
    protected static _gaussWeight: Float64Array;
    protected static _gaussMapper: (xA: number, xB: number, arrayX: Float64Array, arrayW: Float64Array) => number;
    /**
     * Initialize class level work arrays for 5 point Gaussian quadrature.
     * * These static variables are reused on calls to [[integrateDistanceBetweenFractions]].
     */
    static initWorkSpace(): void;
    /**
     * Integrate between nominal fractions with default gauss rule.
     * * The caller is expected to choose nearby fractions so that the single gauss interval accuracy is good.
     */
    integrateDistanceBetweenFractions(fraction0: number, fraction1: number): number;
    /**
     * Inverse integrated distance.
     * @param fraction0 start of fraction interval.
     * @param fraction1 end of fraction interval.
     * @param distance0 distance at start.
     * @param distance1 distance at end.
     * @param targetDistance intermediate distance.
     */
    inverseDistanceFraction(fraction0: number, fraction1: number, distance0: number, distance1: number, targetDistance: number): number | undefined;
    /**
     * Get the point and its derivatives at a given fraction.
     * @param fraction fractional position along x axis
     * @param xy xy coordinates of point on the curve
     * @param d1xy first derivative vector
     * @param d2xy second derivative vector
     * @param d3xy third derivative vector
     */
    fractionToPointAnd3Derivatives(fraction: number, xy: Point3d, d1xy?: Vector3d, d2xy?: Vector3d, d3xy?: Vector3d): void;
    /** Apply a uniform scale around the origin. */
    abstract scaleInPlace(scaleFactor: number): void;
}
//# sourceMappingURL=XYCurveEvaluator.d.ts.map