export interface IPlaneProjectionDefinition {
    frame_reference_point: {
        x: number;
        y: number;
    };
    sky_reference_point: {
        alpha: number;
        delta: number;
    };
    transform_matrix: number[][];
    distortion_matrix: number[][];
    celestial_pole: {
        latitude: number;
        longitude: number;
    };
}
export interface ISphericalProjectionConverter {
    convert(coords: {
        x: number;
        y: number;
    }): {
        alpha: number;
        delta: number;
    };
    convertBack(coords: {
        alpha: number;
        delta: number;
    }): {
        x: number;
        y: number;
    };
}
export declare abstract class SphericalProjectionConverterBase {
    private static longitudalTypes;
    private static isLongitudal;
    protected ra2de: number;
    protected de2ra: number;
    protected phi_0: number;
    protected theta_0: number;
    protected alpha_0: number;
    protected delta_0: number;
    protected theta_p: number;
    protected phi_p: number;
    protected ctypes: string[];
    protected wcslen: number;
    protected cdelts: number[];
    protected crpixs: number[];
    protected crvals: number[];
    protected crotas: number[];
    protected transform_matrix: number[][];
    protected inverse_transform_matrix: number[][];
    protected projection: string;
    protected axes_types: Array<{
        name: string;
        isLongitudal: boolean;
    }>;
    constructor(obj: any[] | IPlaneProjectionDefinition);
    convert(coords: {
        x: number;
        y: number;
    }): {
        alpha: number;
        delta: number;
    };
    convertBack(coords: {
        alpha: number;
        delta: number;
    }): {
        x: number;
        y: number;
    };
    abstract convertToSpherical(coords: {
        x: number;
        y: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
    abstract calculate_alphap_deltap(): {
        alpha_p: number;
        delta_p: number;
    };
    abstract calculate_phi0_theta0(): {
        phi_0: number;
        theta_0: number;
    };
    abstract convertFromCelestial(coords: {
        alpha: number;
        delta: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
    protected multiplyMatrices(arr1: number[][], arr2: number[][]): number[][];
    protected convertToRelative(coords: {
        x: number;
        y: number;
    }): {
        u: number;
        v: number;
    };
    protected convertFromRelative(coords: {
        u: number;
        v: number;
    }): {
        x: number;
        y: number;
    };
    protected convertToIntermediate(coords: {
        u: number;
        v: number;
    }): {
        x: number;
        y: number;
    };
    protected convertFromIntermediate(coords: {
        x: number;
        y: number;
    }): {
        u: number;
        v: number;
    };
    protected convertFromSpherical(coords: {
        r: number;
        phi: number;
        theta: number;
    }): {
        x: number;
        y: number;
    };
    protected convertToCelestial(coords: {
        r: number;
        phi: number;
        theta: number;
    }): {
        alpha: number;
        delta: number;
    };
    protected convertFromCelestialToAngles(coords: {
        alpha: number;
        delta: number;
    }): {
        phi: number;
        theta: number;
    };
    protected constructFromHeader(header: any[]): void;
    protected constructFromDefinition(definition: IPlaneProjectionDefinition): void;
    private inverseOf;
}
export declare abstract class ZenithalProjectionConverterBase extends SphericalProjectionConverterBase {
    calculate_alphap_deltap(): {
        alpha_p: number;
        delta_p: number;
    };
    calculate_phi0_theta0(): {
        phi_0: number;
        theta_0: number;
    };
}
export declare abstract class NonPolarProjectionConverterBase extends SphericalProjectionConverterBase {
    calculate_alphap_deltap(): {
        alpha_p: number;
        delta_p: number;
    };
}
export declare class GnomonicProjectionConverter extends ZenithalProjectionConverterBase implements ISphericalProjectionConverter {
    convertToSpherical(coords: {
        x: number;
        y: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
    convertFromCelestial(coords: {
        alpha: number;
        delta: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
}
export declare class TpvGnomonicProjectionConverter extends GnomonicProjectionConverter implements ISphericalProjectionConverter {
    protected pvs: number[][];
    convert(coords: {
        x: number;
        y: number;
    }): {
        alpha: number;
        delta: number;
    };
    convertBack(coords: {
        alpha: number;
        delta: number;
    }): {
        x: number;
        y: number;
    };
    protected constructFromHeader(header: any[]): void;
    protected constructFromDefinition(definition: IPlaneProjectionDefinition): void;
    protected convertToDistorted(coords: {
        x: number;
        y: number;
    }): {
        x: number;
        y: number;
    };
    protected getDistortedParam(xi: number, eta: number, pv: number[]): number;
    protected convertFromDistorted(coords: {
        x: number;
        y: number;
    }): {
        x: number;
        y: number;
    };
}
export declare class SipGnomonicProjectionConverter extends GnomonicProjectionConverter implements ISphericalProjectionConverter {
    protected a: number[][];
    protected b: number[][];
    protected a_order: number;
    protected b_order: number;
    protected ab_inv: number[][];
    protected inv_a_order: number;
    protected inv_b_order: number;
    convert(coords: {
        x: number;
        y: number;
    }): {
        alpha: number;
        delta: number;
    };
    convertBack(coords: {
        alpha: number;
        delta: number;
    }): {
        x: number;
        y: number;
    };
    protected constructFromHeader(header: any[]): void;
    protected constructFromDefinition(definition: IPlaneProjectionDefinition): void;
    protected convertToDistorted(coords: {
        u: number;
        v: number;
    }): {
        u: number;
        v: number;
    };
    protected getDistortedParam(u: number, v: number, arr: number[][], order: number): number;
    protected convertFromDistorted(coords: {
        u: number;
        v: number;
    }): {
        u: number;
        v: number;
    };
}
export declare class SlantOrtographicProjectionConverter extends ZenithalProjectionConverterBase implements ISphericalProjectionConverter {
    convertToSpherical(coords: {
        x: number;
        y: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
    convertFromCelestial(coords: {
        alpha: number;
        delta: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
}
export declare class ZenithalEquidistantProjectionConverter extends ZenithalProjectionConverterBase implements ISphericalProjectionConverter {
    convertToSpherical(coords: {
        x: number;
        y: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
    convertFromCelestial(coords: {
        alpha: number;
        delta: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
}
export declare class StereographicProjectionConverter extends ZenithalProjectionConverterBase implements ISphericalProjectionConverter {
    convertToSpherical(coords: {
        x: number;
        y: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
    convertFromCelestial(coords: {
        alpha: number;
        delta: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
}
export declare class ZenithalEqualAreaProjectionConverter extends ZenithalProjectionConverterBase implements ISphericalProjectionConverter {
    convertToSpherical(coords: {
        x: number;
        y: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
    convertFromCelestial(coords: {
        alpha: number;
        delta: number;
    }): {
        r: number;
        phi: number;
        theta: number;
    };
}
export declare class SphericalProjectionConvertersBuilder {
    private registeredConverters;
    constructor();
    canBuild(obj: any[] | string): boolean;
    build(obj: any[] | {
        projection: string;
        definition: IPlaneProjectionDefinition;
    }): ISphericalProjectionConverter;
    registerConverter(projection: string, converter: (header: any[]) => ISphericalProjectionConverter): void;
    private canBuildInner;
}
