/**
 * code based on
 * https://github.com/benikabocha/saba/blob/master/src/Saba/Model/MMD/MMDIkSolver.cpp
 */
import { Vector3 } from "@babylonjs/core/Maths/math.vector";
import type { Nullable } from "@babylonjs/core/types";
import type { MmdRuntimeBone } from "./mmdRuntimeBone";
/**
 * IK solver
 */
export declare class IkSolver {
    /**
     * Ik solver index
     */
    readonly index: number;
    /**
     * Iteration count
     *
     * The higher the value, the more accurate the IK solver will be, but the more expensive it will be
     */
    iteration: number;
    /**
     * Limit angle
     */
    limitAngle: number;
    /**
     * The bone to which the IK solver is attached
     */
    readonly ikBone: MmdRuntimeBone;
    /**
     * Ik target bone
     */
    readonly targetBone: MmdRuntimeBone;
    private readonly _ikChains;
    /**
     * Create a new IK solver
     * @param index Ik solver index
     * @param ikBone Attach bone
     * @param targetBone Ik target bone
     */
    constructor(index: number, ikBone: MmdRuntimeBone, targetBone: MmdRuntimeBone);
    /**
     * Add an IK chain
     *
     * The angle constraint must be either both min max or neither
     *
     * For better performance, we do not constrain this to a type
     * @param bone Bone to add
     * @param minimumAngle minimum angle
     * @param maximumAngle maximum angle
     */
    addIkChain(bone: MmdRuntimeBone, minimumAngle: Nullable<Vector3>, maximumAngle: Nullable<Vector3>): void;
    private static readonly _TargetPosition;
    private static readonly _IkPosition;
    /**
     * Solve IK
     */
    solve(): void;
    private static readonly _TargetPosition2;
    private static readonly _IkPosition2;
    private static readonly _InversedChain;
    private static readonly _ChainCross;
    private static readonly _Rotation;
    private static readonly _ChainRotation;
    private static readonly _AnimatedRotation;
    private static readonly _ChainRotationMatrix;
    private static readonly _DecomposedRotation;
    private static readonly _ClampedRotation;
    private static readonly _FinalRotationA;
    private static readonly _FinalRotationB;
    private static readonly _Right;
    private static readonly _Up;
    private static readonly _Forward;
    private static readonly _InversedAnimatedRotation;
    private static readonly _RadToDeg;
    private _solveCore;
    private static readonly _IkPosition3;
    private static readonly _TargetPosition3;
    private static readonly _InversedChain2;
    private static readonly _ChainIkPosition;
    private static readonly _ChainTargetPosition;
    private static readonly _Rotation2;
    private static readonly _TargetVector;
    private static readonly _InversedAnimatedRotation2;
    private _solvePlane;
    private static readonly _TwoPi;
    private _normalizeAngle;
    private _diffAngle;
    private static readonly _Tests;
    private _decomposeToRef;
}
