Bitbybit Docs
    Preparing search index...

    Class Vector

    Векторная математика на простых массивах чисел. Вектор - это массив чисел; в 3D это [x, y, z] с осью Y, направленной вверх, той же формы, что и точка, так что их можно передавать в методы друг друга. Каждый метод возвращает новый массив или число и никогда не изменяет свои входные данные. Углы в градусах.

    Index

    Constructors

    angles

    • Измеряет угол между двумя векторами в градусах, всегда между 0 и 180.

      Направление поворота не учитывается; для этого используйте signedAngleBetween. Пример: [1,0,0] и [0,1,0] -> 90

      Parameters

      Returns number

      Угол в градусах

      const angle = bitbybit.vector.angleBetween({ first: [1, 0, 0], second: [0, 1, 0] });
      
    • Измеряет угол со знаком от первого 2D-вектора ко второму, в градусах от -180 до 180.

      Используются только первые две компоненты каждого вектора; положительный угол поворачивает против часовой стрелки. Пример: [1,0] к [0,1] -> 90, [0,1] к [1,0] -> -90

      Parameters

      Returns number

      Угол со знаком в градусах

      const angle = bitbybit.vector.angleBetweenNormalized2d({ first: [1, 0], second: [0, 1] });
      
    • Измеряет угол от первого вектора ко второму, поворачивая вокруг опорного направления, в градусах от 0 до 360.

      Поворот против часовой стрелки, когда опорный вектор направлен на вас. Пример: [1,0,0] к [0,0,-1] вокруг [0,1,0] -> 90

      Parameters

      • inputs: TwoVectorsReferenceDto

        Два вектора и опорное направление, вокруг которого выполняется поворот

      Returns number

      Угол в градусах от 0 до 360

      const angle = bitbybit.vector.positiveAngleBetween({ first: [1, 0, 0], second: [0, 0, -1], reference: [0, 1, 0] });
      
    • Измеряет угол от первого вектора ко второму, поворачивая вокруг опорного направления, в градусах от 0 до 360.

      Поворот против часовой стрелки, когда опорный вектор направлен на вас: поворот по часовой стрелке на 30 градусов читается как 330. Пример: [1,0,0] к [0,0,-1] вокруг [0,1,0] -> 90

      Parameters

      • inputs: TwoVectorsReferenceDto

        Два вектора и опорное направление, вокруг которого выполняется поворот

      Returns number

      Угол в градусах от 0 до 360

      const angle = bitbybit.vector.signedAngleBetween({ first: [1, 0, 0], second: [0, 0, -1], reference: [0, 1, 0] });
      

    base

    • Вычисляет векторное произведение двух 3D-векторов: вектор под прямым углом к обоим.

      Его направление следует правилу правой руки, а его длина - площадь параллелограмма, натянутого на два вектора. Пример: [1,0,0] x [0,1,0] -> [0,0,1]

      Parameters

      Returns number[]

      Вектор, перпендикулярный обоим

      const normal = bitbybit.vector.cross({ first: [1, 0, 0], second: [0, 1, 0] });
      
    • Делит каждую компоненту вектора на одно число.

      Пример: [10,20,30] / 2 -> [5,10,15]

      Parameters

      • inputs: VectorScalarDto

        Вектор и число, на которое делить

      Returns number[]

      Разделенный вектор

      const half = bitbybit.vector.div({ vector: [10, 20, 30], scalar: 2 });
      
    • Вычитает первое значение вектора из его последнего, что для отсортированного списка есть его размах.

      Пример: [1,3,5,9] -> 8

      Parameters

      Returns number

      Последнее значение минус первое значение

      const span = bitbybit.vector.domain({ vector: [1, 3, 5, 9] });
      
    • Вычисляет скалярное произведение двух векторов: сумму произведений соответствующих компонент.

      Оно равно 0 для векторов под прямым углом и, для единичных векторов, косинусу угла между ними. Пример: [1,2,3] и [4,5,6] -> 32

      Parameters

      Returns number

      Скалярное произведение

      const projection = bitbybit.vector.dot({ first: [1, 2, 3], second: [4, 5, 6] });
      
    • Умножает каждую компоненту вектора на одно число.

      Пример: [2,3,4] x 5 -> [10,15,20]

      Parameters

      • inputs: VectorScalarDto

        Вектор и число, на которое умножать

      Returns number[]

      Масштабированный вектор

      const scaled = bitbybit.vector.mul({ vector: [2, 3, 4], scalar: 5 });
      
    • Меняет знак каждой компоненты, так что вектор направлен в противоположную сторону.

      Пример: [5,-3,2] -> [-5,3,-2]

      Parameters

      • inputs: VectorDto

        Вектор, который нужно обратить

      Returns number[]

      Вектор с обратным знаком

      const opposite = bitbybit.vector.neg({ vector: [5, -3, 2] });
      
    • Вычисляет квадрат длины вектора, что избегает квадратного корня, когда длины только сравниваются.

      Пример: [3,4,0] -> 25

      Parameters

      Returns number

      Квадрат длины

      const n2 = bitbybit.vector.normSquared({ vector: [3, 4, 0] });
      
    • Вычисляет длину вектора.

      Пример: [3,4,0] -> 5, [1,0,0] -> 1

      Parameters

      Returns number

      Длина в единицах модели

      const len = bitbybit.vector.norm({ vector: [3, 4, 0] });
      
    • Масштабирует 3D-вектор до длины 1, сохраняя его направление.

      У вектора короче 1e-8 нет направления, которое можно сохранить, так что результат undefined. Пример: [3,4,0] -> [0.6,0.8,0]

      Parameters

      • inputs: VectorDto

        3D-вектор для нормализации

      Returns number[]

      Единичный вектор или undefined для входа нулевой длины

      const direction = bitbybit.vector.normalized({ vector: [3, 4, 0] });
      
    • Находит точку на заданном расстоянии от начальной точки вдоль направления.

      Направление используется как задано, так что направление длиной 2 проходит вдвое большее расстояние. Пример: начало [0,0,0], направление [1,0,0], расстояние 5 -> [5,0,0]

      Parameters

      • inputs: RayPointDto

        Начальная точка, направление и расстояние

      Returns number[]

      Точка на луче

      const ahead = bitbybit.vector.onRay({ point: [0, 0, 0], vector: [1, 0, 0], distance: 5 });
      
    • Вычитает второй вектор из первого, покомпонентно.

      Пример: [10,20,30] - [1,2,3] -> [9,18,27]

      Parameters

      • inputs: TwoVectorsDto

        Вектор, из которого вычитать, и вектор, который вычитать

      Returns number[]

      Вектор разностей

      const diff = bitbybit.vector.sub({ first: [10, 20, 30], second: [1, 2, 3] });
      
    • Складывает все значения вектора в одно число.

      Пример: [1,2,3,4] -> 10

      Parameters

      • inputs: VectorDto

        Вектор, компоненты которого нужно сложить

      Returns number

      Сумма

      const total = bitbybit.vector.sum({ vector: [1, 2, 3, 4] });
      
    • Вычисляет квадрат длины 3D-вектора, что избегает квадратного корня, когда длины только сравниваются.

      Пример: [3,4,0] -> 25

      Parameters

      Returns number

      Квадрат длины

      const l2 = bitbybit.vector.lengthSq({ vector: [3, 4, 0] });
      
    • Вычисляет длину 3D-вектора.

      Пример: [3,4,0] -> 5

      Parameters

      Returns number

      Длина в единицах модели

      const len = bitbybit.vector.length({ vector: [3, 4, 0] });
      

    create

    • Строит 3D-вектор из его значений x, y и z.

      Пример: x=1, y=2, z=3 -> [1,2,3]

      Parameters

      Returns Vector3

      Вектор [x, y, z]

      const up = bitbybit.vector.vectorXYZ({ x: 0, y: 1, z: 0 });
      
    • Строит 2D-вектор из его значений x и y.

      Пример: x=3, y=4 -> [3,4]

      Parameters

      Returns Vector2

      Вектор [x, y]

      const right = bitbybit.vector.vectorXY({ x: 1, y: 0 });
      
    • Перечисляет целые числа от 0 до max, не включая его.

      Пример: max=5 -> [0,1,2,3,4]

      Parameters

      • inputs: RangeMaxDto

        Конец диапазона, который не включается

      Returns number[]

      Числа от 0 до max - 1

      const indices = bitbybit.vector.range({ max: 5 });
      
    • Перечисляет числа от min до max с шагом step; max включается, когда шаг попадает на него.

      Пример: min=0, max=10, step=2 -> [0,2,4,6,8,10]

      Parameters

      • inputs: SpanDto

        Начало, конец и шаг

      Returns number[]

      Числа в промежутке

      const values = bitbybit.vector.span({ min: 0, max: 10, step: 2.5 });
      
    • Перечисляет nrItems чисел от min до max, расставленных по кривой сглаживания, так что они сгущаются на одном конце или на обоих.

      При включенном intervals результат содержит промежутки между соседями вместо самих значений. Пример: min=0, max=100, nrItems=5, ease='easeInQuad' -> [0, 6.25, 25, 56.25, 100]

      Parameters

      • inputs: SpanEaseItemsDto

        Начало, конец, число элементов, функция сглаживания и возвращать ли промежутки

      Returns number[]

      Числа с плавным распределением или промежутки между ними

      const eased = bitbybit.vector.spanEaseItems({ min: 0, max: 100, nrItems: 5, ease: Bit.Inputs.Math.easeEnum.easeInQuad, intervals: false });
      
    • Перечисляет nrItems равномерно расставленных чисел от min до max, включая оба.

      Пример: min=0, max=10, nrItems=5 -> [0, 2.5, 5, 7.5, 10]

      Parameters

      Returns number[]

      Равномерно распределенные числа

      const values = bitbybit.vector.spanLinearItems({ min: 0, max: 10, nrItems: 5 });
      
    • Превращает список числовых строк в числа.

      Строка, не являющаяся числом, становится NaN. Пример: ['1', '2.5', '3'] -> [1, 2.5, 3]

      Parameters

      Returns number[]

      Числа

      const numbers = bitbybit.vector.parseNumbers({ vector: ["1", "2.5", "-3"] });
      

    distance

    • Вычисляет квадрат расстояния между двумя векторами, что избегает квадратного корня, когда расстояния только сравниваются.

      Пример: [0,0,0] к [3,4,0] -> 25

      Parameters

      Returns number

      Квадрат расстояния

      const d2 = bitbybit.vector.distSquared({ first: [0, 0, 0], second: [3, 4, 0] });
      
    • Вычисляет расстояние по прямой между двумя векторами.

      Пример: [0,0,0] к [3,4,0] -> 5

      Parameters

      Returns number

      Расстояние в единицах модели

      const distance = bitbybit.vector.dist({ first: [0, 0, 0], second: [3, 4, 0] });
      
    • Линейно смешивает два вектора по доле.

      fraction - доля first: 1 дает first, 0 дает second, 0.5 - середину. Пример: [0,0,0] и [10,10,10] при 0.5 -> [5,5,5]

      Parameters

      Returns number[]

      Смешанный вектор

      const mid = bitbybit.vector.lerp({ first: [0, 0, 0], second: [10, 10, 10], fraction: 0.5 });
      

    extract

    • Находит наибольшее значение в векторе.

      Пример: [3, 7, 2, 9, 1] -> 9

      Parameters

      Returns number

      Наибольшая компонента

      const largest = bitbybit.vector.max({ vector: [3, 7, 2, 9, 1] });
      
    • Находит наименьшее значение в векторе.

      Пример: [3, 7, 2, 9, 1] -> 1

      Parameters

      Returns number

      Наименьшая компонента

      const smallest = bitbybit.vector.min({ vector: [3, 7, 2, 9, 1] });
      

    remove

    • Удаляет из списка каждый повторяющийся вектор, сохраняя первое вхождение каждого.

      Два вектора считаются одинаковыми, когда каждая компонента отличается меньше чем на tolerance. Пример: [[1,2,3], [4,5,6], [1,2,3], [7,8,9]] -> [[1,2,3], [4,5,6], [7,8,9]]

      Parameters

      Returns number[][]

      Векторы без повторов, в исходном порядке

      const unique = bitbybit.vector.removeAllDuplicateVectors({
      vectors: [[1, 2, 3], [4, 5, 6], [1, 2, 3]],
      tolerance: 1e-7,
      });
    • Удаляет вектор, когда он повторяет стоящий прямо перед ним; тот же вектор дальше сохраняется.

      При включенном checkFirstAndLast последний вектор, повторяющий первый, тоже отбрасывается, что аккуратно замыкает петлю точек. Компоненты в пределах tolerance друг от друга считаются равными. Пример: [[1,2], [1,2], [3,4], [1,2]] -> [[1,2], [3,4], [1,2]]

      Parameters

      Returns number[][]

      Векторы без подряд идущих повторов

      const cleaned = bitbybit.vector.removeConsecutiveDuplicateVectors({
      vectors: [[0, 0], [0, 0], [1, 1], [0, 0]],
      checkFirstAndLast: true,
      tolerance: 1e-7,
      });

    sum

    • Складывает список векторов покомпонентно в один вектор.

      У результата столько же компонент, сколько у первого вектора. Пример: [[1,2,3], [4,5,6], [7,8,9]] -> [12,15,18]

      Parameters

      • inputs: VectorsDto

        Векторы для сложения

      Returns number[]

      Вектор сумм

      const total = bitbybit.vector.addAll({ vectors: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] });
      
    • Складывает два вектора покомпонентно.

      Пример: [1,2,3] + [4,5,6] -> [5,7,9]

      Parameters

      • inputs: TwoVectorsDto

        Два вектора для сложения

      Returns number[]

      Вектор сумм

      const sum = bitbybit.vector.add({ first: [1, 2, 3], second: [4, 5, 6] });
      
    • Сообщает, является ли каждое значение в списке булевых значений true.

      Пример: [true, true, true] -> true, [true, false, true] -> false

      Parameters

      • inputs: VectorBoolDto

        Логические значения для проверки

      Returns boolean

      true, если ни одна компонента не равна false

      const allTrue = bitbybit.vector.all({ vector: [true, true, false] });
      

    validate

    • Сообщает, одинаковы ли два вектора в пределах допуска, компонента за компонентой.

      Векторы разной длины никогда не одинаковы. Пример: [1,2,3] и [1.0001,2.0001,3.0001] с допуском 0.001 -> true

      Parameters

      Returns boolean

      true, если каждая компонента отличается меньше чем на допуск

      const same = bitbybit.vector.vectorsTheSame({ vec1: [1, 2, 3], vec2: [1, 2, 3.0000001], tolerance: 1e-6 });
      
    • Отмечает, какие компоненты вектора являются конечными числами.

      Пример: [1, 2, Infinity, 3] -> [true, true, false, true]

      Parameters

      • inputs: VectorDto

        Вектор для проверки

      Returns boolean[]

      По одному логическому значению на компоненту, true, если она конечна

      const flags = bitbybit.vector.finite({ vector: [1, Infinity, 3] });
      
    • Сообщает, имеет ли вектор нулевую длину, то есть каждая компонента ровно 0.

      Пример: [0,0,0] -> true, [0,0,0.001] -> false

      Parameters

      • inputs: VectorDto

        Вектор для проверки

      Returns boolean

      true, если длина равна 0

      const zero = bitbybit.vector.isZero({ vector: [0, 0, 0] });