/**
 * @author @thkruz Theodore Kruczek
 * @description Orbital Object ToolKit (ootk) is a collection of tools for working
 * with satellites and other orbital objects.
 * @license AGPL-3.0-or-later
 * @copyright (c) 2025 Kruczek Labs LLC
 *
 * Many of the classes are based off of the work of @david-rc-dayton and his
 * Pious Squid library (https://github.com/david-rc-dayton/pious_squid) which
 * is licensed under the MIT license.
 *
 * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
 * terms of the GNU Affero General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 *
 * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License along with
 * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
 */
import { Kilometers, KilometersPerSecond, Radians } from '../main.js';
import { Matrix } from './Matrix.js';
import { Vector } from './Vector.js';
export declare class Vector3D<T extends number = number> {
    x: T;
    y: T;
    z: T;
    constructor(x: T, y: T, z: T);
    /**
     * Create a new Vector3D object from the first three elements of a Vector
     * object.
     * @param v The Vector object to convert.
     * @returns A new Vector3D object.
     */
    static fromVector<U extends number>(v: Vector<U>): Vector3D<U>;
    static readonly origin: Vector3D<number>;
    static readonly xAxis: Vector3D<number>;
    static readonly yAxis: Vector3D<number>;
    static readonly zAxis: Vector3D<number>;
    static readonly xAxisNeg: Vector3D<number>;
    static readonly yAxisNeg: Vector3D<number>;
    static readonly zAxisNeg: Vector3D<number>;
    toList(): T[];
    toArray(): Float64Array<ArrayBuffer>;
    /**
     * Return the Vector3D element at the provided index.
     * @deprecated don't do this
     * @param index The index of the element to return.
     * @returns The element at the provided index.
     */
    getElement(index: number): number;
    toVector(): Vector<T>;
    toString(fixed?: number): string;
    magnitude(): T;
    add(v: Vector3D<T>): Vector3D<T>;
    subtract(v: Vector3D<T>): Vector3D<T>;
    scale<U extends number>(n: U): Vector3D<U>;
    negate(): Vector3D<T>;
    /**
     * Return the Euclidean distance between this and another Vector3D.
     * @param v The other Vector3D.
     * @returns The distance between this and the other Vector3D.
     */
    distance(v: Vector3D<T>): T;
    /**
     * Convert this to a unit Vector3D.
     * @returns A unit Vector3D.
     */
    normalize(): Vector3D<T>;
    dot<T extends number>(v: Vector3D<T>): T;
    outer(v: Vector3D): Matrix;
    cross<U extends number>(v: Vector3D<U>): Vector3D<U>;
    skewSymmetric(): Matrix;
    rotX(theta: number): Vector3D;
    rotY(theta: Radians): Vector3D<T>;
    rotZ(theta: Radians): Vector3D<T>;
    angle<U extends number>(v: Vector3D<U>): Radians;
    angleDegrees(v: Vector3D<T>): number;
    sight(v: Vector3D<KilometersPerSecond>, radius: Kilometers): boolean;
    bisect(v: Vector3D<T>): Vector3D<T>;
    row(): Matrix;
    column(): Matrix;
    join(v: Vector3D): Vector;
}
