Bitbybit Docs
    Preparing search index...

    Class Vector

    Matemática vetorial sobre arrays de números simples. Um vetor é um array de números; em 3D é [x, y, z] com Y a apontar para cima, a mesma forma que um ponto, pelo que os dois podem ser passados aos métodos um do outro. Cada método devolve um novo array ou um número e nunca altera as suas entradas. Os ângulos estão em graus.

    Index

    Constructors

    angles

    • Mede o ângulo entre dois vetores em graus, sempre entre 0 e 180.

      O sentido da rotação não é considerado; use signedAngleBetween para isso. Exemplo: [1,0,0] e [0,1,0] -> 90

      Parameters

      Returns number

      Ângulo em graus

      const angle = bitbybit.vector.angleBetween({ first: [1, 0, 0], second: [0, 1, 0] });
      
    • Mede o ângulo com sinal do primeiro vetor 2D para o segundo, em graus de -180 a 180.

      Só as duas primeiras entradas de cada vetor são usadas; um ângulo positivo roda no sentido anti-horário. Exemplo: [1,0] para [0,1] -> 90, [0,1] para [1,0] -> -90

      Parameters

      Returns number

      Ângulo com sinal em graus

      const angle = bitbybit.vector.angleBetweenNormalized2d({ first: [1, 0], second: [0, 1] });
      
    • Mede o ângulo do primeiro vetor para o segundo, rodando em torno de uma direção de referência, em graus de 0 a 360.

      A rotação é no sentido anti-horário quando o vetor de referência aponta para si. Exemplo: [1,0,0] para [0,0,-1] em torno de [0,1,0] -> 90

      Parameters

      Returns number

      Ângulo em graus de 0 a 360

      const angle = bitbybit.vector.positiveAngleBetween({ first: [1, 0, 0], second: [0, 0, -1], reference: [0, 1, 0] });
      
    • Mede o ângulo do primeiro vetor para o segundo, rodando em torno de uma direção de referência, em graus de 0 a 360.

      A rotação é no sentido anti-horário quando o vetor de referência aponta para si: uma rotação no sentido horário de 30 graus lê-se como 330. Exemplo: [1,0,0] para [0,0,-1] em torno de [0,1,0] -> 90

      Parameters

      Returns number

      Ângulo em graus de 0 a 360

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

    base

    • Calcula o produto externo de dois vetores 3D: um vetor perpendicular a ambos.

      A sua direção segue a regra da mão direita e o seu comprimento é a área do paralelogramo que os dois vetores definem. Exemplo: [1,0,0] x [0,1,0] -> [0,0,1]

      Parameters

      Returns number[]

      O vetor perpendicular a ambos

      const normal = bitbybit.vector.cross({ first: [1, 0, 0], second: [0, 1, 0] });
      
    • Divide cada entrada de um vetor por um número.

      Exemplo: [10,20,30] / 2 -> [5,10,15]

      Parameters

      Returns number[]

      O vetor dividido

      const half = bitbybit.vector.div({ vector: [10, 20, 30], scalar: 2 });
      
    • Subtrai o primeiro valor de um vetor ao seu último, o que para uma lista ordenada é a sua amplitude.

      Exemplo: [1,3,5,9] -> 8

      Parameters

      Returns number

      Último valor menos o primeiro valor

      const span = bitbybit.vector.domain({ vector: [1, 3, 5, 9] });
      
    • Calcula o produto interno de dois vetores: a soma dos produtos das entradas correspondentes.

      É 0 para vetores perpendiculares e, para vetores unitários, o cosseno do ângulo entre eles. Exemplo: [1,2,3] e [4,5,6] -> 32

      Parameters

      Returns number

      O produto escalar

      const projection = bitbybit.vector.dot({ first: [1, 2, 3], second: [4, 5, 6] });
      
    • Multiplica cada entrada de um vetor por um número.

      Exemplo: [2,3,4] x 5 -> [10,15,20]

      Parameters

      Returns number[]

      O vetor escalado

      const scaled = bitbybit.vector.mul({ vector: [2, 3, 4], scalar: 5 });
      
    • Inverte o sinal de cada entrada, de modo que o vetor aponta no sentido oposto.

      Exemplo: [5,-3,2] -> [-5,3,-2]

      Parameters

      Returns number[]

      O vetor negado

      const opposite = bitbybit.vector.neg({ vector: [5, -3, 2] });
      
    • Calcula o comprimento ao quadrado de um vetor, o que evita a raiz quadrada quando só se comparam comprimentos.

      Exemplo: [3,4,0] -> 25

      Parameters

      Returns number

      O comprimento ao quadrado

      const n2 = bitbybit.vector.normSquared({ vector: [3, 4, 0] });
      
    • Calcula o comprimento de um vetor.

      Exemplo: [3,4,0] -> 5, [1,0,0] -> 1

      Parameters

      Returns number

      O comprimento em unidades do modelo

      const len = bitbybit.vector.norm({ vector: [3, 4, 0] });
      
    • Escala um vetor 3D para comprimento 1 mantendo a sua direção.

      Um vetor mais curto do que 1e-8 não tem direção a manter, por isso o resultado é undefined. Exemplo: [3,4,0] -> [0.6,0.8,0]

      Parameters

      Returns number[]

      O vetor unitário, ou undefined para uma entrada de comprimento zero

      const direction = bitbybit.vector.normalized({ vector: [3, 4, 0] });
      
    • Encontra o ponto a uma dada distância de um ponto de partida ao longo de uma direção.

      A direção é usada tal como é dada, por isso uma direção de comprimento 2 percorre o dobro da distância. Exemplo: início [0,0,0], direção [1,0,0], distância 5 -> [5,0,0]

      Parameters

      • inputs: RayPointDto

        O ponto inicial, a direção e a distância

      Returns number[]

      O ponto no raio

      const ahead = bitbybit.vector.onRay({ point: [0, 0, 0], vector: [1, 0, 0], distance: 5 });
      
    • Subtrai o segundo vetor ao primeiro, entrada a entrada.

      Exemplo: [10,20,30] - [1,2,3] -> [9,18,27]

      Parameters

      • inputs: TwoVectorsDto

        O vetor do qual subtrair e o vetor a subtrair

      Returns number[]

      O vetor das diferenças

      const diff = bitbybit.vector.sub({ first: [10, 20, 30], second: [1, 2, 3] });
      
    • Soma todos os valores de um vetor num só número.

      Exemplo: [1,2,3,4] -> 10

      Parameters

      Returns number

      O total

      const total = bitbybit.vector.sum({ vector: [1, 2, 3, 4] });
      
    • Calcula o comprimento ao quadrado de um vetor 3D, o que evita a raiz quadrada quando só se comparam comprimentos.

      Exemplo: [3,4,0] -> 25

      Parameters

      Returns number

      O comprimento ao quadrado

      const l2 = bitbybit.vector.lengthSq({ vector: [3, 4, 0] });
      
    • Calcula o comprimento de um vetor 3D.

      Exemplo: [3,4,0] -> 5

      Parameters

      Returns number

      O comprimento em unidades do modelo

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

    create

    • Constrói um vetor 3D a partir dos seus valores x, y e z.

      Exemplo: x=1, y=2, z=3 -> [1,2,3]

      Parameters

      Returns Vector3

      O vetor [x, y, z]

      const up = bitbybit.vector.vectorXYZ({ x: 0, y: 1, z: 0 });
      
    • Constrói um vetor 2D a partir dos seus valores x e y.

      Exemplo: x=3, y=4 -> [3,4]

      Parameters

      Returns Vector2

      O vetor [x, y]

      const right = bitbybit.vector.vectorXY({ x: 1, y: 0 });
      
    • Lista os números inteiros de 0 até, mas não incluindo, max.

      Exemplo: max=5 -> [0,1,2,3,4]

      Parameters

      • inputs: RangeMaxDto

        O fim do intervalo, que fica de fora

      Returns number[]

      Os números de 0 a max - 1

      const indices = bitbybit.vector.range({ max: 5 });
      
    • Lista os números de min a max, avançando step de cada vez; max é incluído quando um passo cai exatamente nele.

      Exemplo: min=0, max=10, step=2 -> [0,2,4,6,8,10]

      Parameters

      • inputs: SpanDto

        O início, o fim e o passo

      Returns number[]

      Os números no intervalo

      const values = bitbybit.vector.span({ min: 0, max: 10, step: 2.5 });
      
    • Lista nrItems números de min a max espaçados por uma curva de suavização, de modo que se concentram numa extremidade ou em ambas.

      Com intervals ligado, o resultado contém os intervalos entre vizinhos em vez dos próprios valores. Exemplo: min=0, max=100, nrItems=5, ease='easeInQuad' -> [0, 6.25, 25, 56.25, 100]

      Parameters

      • inputs: SpanEaseItemsDto

        O início, o fim, o número de itens, a suavização e se deve devolver os intervalos

      Returns number[]

      Os números suavizados, ou os intervalos entre eles

      const eased = bitbybit.vector.spanEaseItems({ min: 0, max: 100, nrItems: 5, ease: Bit.Inputs.Math.easeEnum.easeInQuad, intervals: false });
      
    • Lista nrItems números uniformemente espaçados de min a max, ambos incluídos.

      Exemplo: min=0, max=10, nrItems=5 -> [0, 2.5, 5, 7.5, 10]

      Parameters

      Returns number[]

      Os números igualmente espaçados

      const values = bitbybit.vector.spanLinearItems({ min: 0, max: 10, nrItems: 5 });
      
    • Transforma uma lista de strings numéricas em números.

      Uma string que não seja um número torna-se NaN. Exemplo: ['1', '2.5', '3'] -> [1, 2.5, 3]

      Parameters

      Returns number[]

      Os números

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

    distance

    • Calcula a distância ao quadrado entre dois vetores, o que evita a raiz quadrada quando só se comparam distâncias.

      Exemplo: [0,0,0] para [3,4,0] -> 25

      Parameters

      Returns number

      A distância ao quadrado

      const d2 = bitbybit.vector.distSquared({ first: [0, 0, 0], second: [3, 4, 0] });
      
    • Calcula a distância em linha reta entre dois vetores.

      Exemplo: [0,0,0] para [3,4,0] -> 5

      Parameters

      Returns number

      A distância em unidades do modelo

      const distance = bitbybit.vector.dist({ first: [0, 0, 0], second: [3, 4, 0] });
      
    • Interpola linearmente dois vetores por uma fração.

      fraction é a parte de first: 1 dá first, 0 dá second, 0.5 o ponto médio. Exemplo: [0,0,0] e [10,10,10] a 0.5 -> [5,5,5]

      Parameters

      Returns number[]

      O vetor interpolado

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

    extract

    • Encontra o maior valor num vetor.

      Exemplo: [3, 7, 2, 9, 1] -> 9

      Parameters

      Returns number

      A maior entrada

      const largest = bitbybit.vector.max({ vector: [3, 7, 2, 9, 1] });
      
    • Encontra o menor valor num vetor.

      Exemplo: [3, 7, 2, 9, 1] -> 1

      Parameters

      Returns number

      A menor entrada

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

    remove

    • Remove todos os vetores repetidos de uma lista, mantendo a primeira ocorrência de cada um.

      Dois vetores contam como o mesmo quando todas as entradas diferem menos do que tolerance. Exemplo: [[1,2,3], [4,5,6], [1,2,3], [7,8,9]] -> [[1,2,3], [4,5,6], [7,8,9]]

      Parameters

      Returns number[][]

      Os vetores sem repetições, pela sua ordem original

      const unique = bitbybit.vector.removeAllDuplicateVectors({
      vectors: [[1, 2, 3], [4, 5, 6], [1, 2, 3]],
      tolerance: 1e-7,
      });
    • Remove um vetor quando repete o imediatamente anterior; o mesmo vetor mais adiante é mantido.

      Com checkFirstAndLast ligado, um último vetor que repita o primeiro também é descartado, o que fecha um laço de pontos de forma limpa. Entradas dentro de tolerance umas das outras contam como iguais. Exemplo: [[1,2], [1,2], [3,4], [1,2]] -> [[1,2], [3,4], [1,2]]

      Parameters

      Returns number[][]

      Os vetores sem repetições consecutivas

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

    sum

    • Soma uma lista de vetores entrada a entrada num só vetor.

      O resultado tem tantas entradas quantas o primeiro vetor. Exemplo: [[1,2,3], [4,5,6], [7,8,9]] -> [12,15,18]

      Parameters

      Returns number[]

      O vetor das somas

      const total = bitbybit.vector.addAll({ vectors: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] });
      
    • Soma dois vetores entrada a entrada.

      Exemplo: [1,2,3] + [4,5,6] -> [5,7,9]

      Parameters

      Returns number[]

      O vetor das somas

      const sum = bitbybit.vector.add({ first: [1, 2, 3], second: [4, 5, 6] });
      
    • Indica se todos os valores numa lista de booleanos são verdadeiros.

      Exemplo: [true, true, true] -> true, [true, false, true] -> false

      Parameters

      Returns boolean

      True quando nenhuma entrada é false

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

    validate

    • Indica se dois vetores são o mesmo dentro de uma tolerância, entrada a entrada.

      Vetores de comprimento diferente nunca são o mesmo. Exemplo: [1,2,3] e [1.0001,2.0001,3.0001] com tolerância 0.001 -> true

      Parameters

      Returns boolean

      True quando cada entrada difere em menos do que a tolerância

      const same = bitbybit.vector.vectorsTheSame({ vec1: [1, 2, 3], vec2: [1, 2, 3.0000001], tolerance: 1e-6 });
      
    • Marca quais entradas de um vetor são números finitos.

      Exemplo: [1, 2, Infinity, 3] -> [true, true, false, true]

      Parameters

      Returns boolean[]

      Um booleano por entrada, true quando é finita

      const flags = bitbybit.vector.finite({ vector: [1, Infinity, 3] });
      
    • Indica se um vetor não tem comprimento, isto é, se todas as entradas são exatamente 0.

      Exemplo: [0,0,0] -> true, [0,0,0.001] -> false

      Parameters

      Returns boolean

      True quando o comprimento é 0

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