美文网首页
threejs 三维向量Vector3学习

threejs 三维向量Vector3学习

作者: squidbrother | 来源:发表于2023-04-14 23:07 被阅读0次

描述

官方描述:

类表示的是一个三维向量
一个三维向量表示的是一个有顺序的、三个为一组的数字组合(标记为x、y和z)
例如:

  • 一个位于三维空间中的点
  • 一个在三维空间中的方向与长度的定义
  • 任意的、有顺序的、三个为一组的数字组合
创建一个三维向量
//-- 默认值 x=0, y=0, z=0
const v1 = new THREE.Vector3( x, y, z );
解释官方描述中的定义
  1. 一个空间的点怎么解释?
    就是三维空间x,y,z三个坐标轴对应的位置

  2. 三维空间的方向与长度是指什么?

  • 长度是指从 坐标轴原点(0,0,0)到目标三维向量的距离 -- (欧几里德距离,即直线距离)
  • 方向是指从 坐标轴原点(0,0,0)到目标三维向量的方向 ??

这个方向怎么理解呢?怎么用呢?
目前不清楚

常用的方法

  1. distanceTo - 计算两个坐标点的距离
const a = new THREE.Vector3( 5, 5, 5 );
const b = new THREE.Vector3( 10, 10, 10 );
//-- 表示a到b的距离,是一个绝对值,不会为负
const d = a.distanceTo( b );
  1. 计算两个已知三维向量的方向向量
const _point1 = new THREE.Vector3( 20, 0, 0 );
const _point2 = new THREE.Vector3( 0, 0, 10 );
const _point3 = _point2.clone().sub( _point1 );
console.log( _point3 );
  • 说明:
    两个点的方向向量,就是目标点减去出发点,获得的最终坐标,称作他们的方向向量
    从视图上来看:
    类似于从坐标原点(0,0,0)出发,与这两个点连线,平行且距离相等的点的位置,就是方向向量

针对代码来看

  • 点1(红色)到点2(绿色)的方向向量,就是用点2(绿色)减去点1(红色)


    红到绿的方向向量 - 白色线到达的位置
  • 点2(绿色)到点1(红色)的方向向量,就是用点1(红色)减去点2(绿色)


    绿到红的方向向量- 白色线到达的位置
  1. 方向向量怎么用?
    如果知道点A到点B的方向向量,又再知道A的三维向量,那么求B的位置
    点A到点B的方向向量,是B减去A,又已知A,那么方向向量+A点,即可求出B点
let pointAB = { x: -20, y: 0, z: 10 };
let pointA = new THREE.Vector3( 20, 0, 0 ); 
let pointB = pointA.clone().add(pointAB); //-- { x:0, y:0, z:10 }
  1. 叉乘获得两个三维向量的法相(垂直的)点 - cross
const _point1 = new THREE.Vector3( 20, 0, 0 );
const _point2 = new THREE.Vector3( 0, 0, 10 );
const _point3 = _point2.clone().cross( _point1 );
console.log( _point3 ); //-- 通过差值获取法相点位置
红到绿的叉乘蓝
  1. 点积获取两个三维向量的余弦值 - dot
  • 获取两个点的余弦值
const _point1 = new THREE.Vector3( 20, 0, 0 );
const _point2 = new THREE.Vector3( 0, 0, 10 );
const _point3 = _point2.clone().cross( _point1 );
console.log( _point3 ); //-- { x: 0, y: 200, z: 0 }
//计算两个三维向量的余弦值
console.log(_point1.clone().dot(_point3)) //-- 0 - (两个点垂直的话,余弦值为0)
console.log(_point2.clone().dot(_point3)) //-- 0 - (两个点垂直的话,余弦值为0)
  1. 归一化 - 三维向量保持方向相同,长度为1 - normalize
const playerDirection = new THREE.Vector3();
//-- playerDirection获取与playerMesh方向与长度的三维向量
playerMesh.getWorldDirection(playerDirection);
//-- 将三维向量playerDirection进行归一化操作,方向不变,长度为1
playerDirection.normalize();
playerDirection.multiplyScalar(5)
camera.position.copy(playerDirection);

未完待续....

相关文章

  • 结构体 静态类

    定义三维向量结构体Vector3,字段有x,y,z 创建该结构体变量并赋值,输出该结构体变量中的成员的值 字段 属...

  • Unity3D数学基础(Vector3)

    【向量(Vector3),解释】https://blog.csdn.net/bobo553443/article/...

  • Unity 基础 - Vector3

    Vector 是向量,矢量的意思,向量既有大小,又有方向,Verctor3 就是三维向量,一个三维向量会有三个分量...

  • OpenGL学习之路(4.1) 向量的简单介绍

    什么是向量? 空间中的一个点,既是一个顶点,也是一个向量image.png 在代码中如何定义三维,四维向量或者三维...

  • 向量基本定理整理 三(外积)

    定义 给定两个三维向量P和Q,他们的外积可写为 令两个向量P和Q为三维向量则满足等于向量P和Q所构成的平行四边形的...

  • 向量点乘与叉乘

    说明:本文以三维向量举例,以斜体加粗字母表示向量 点乘 对于向量 A = (x1, y1, z1) ,向量 B ...

  • 向量Vector3在C++中的实现

    3D数学向量的基础原理在计算机中的表现 C++中实现向量的编程 首先我们要创建一个Vector3的头文件 接着在头...

  • three.js

    threejs官网 三维场景基本要素: 场景(Scene):模型、灯光等 相机(Camera):观察场景的视角 渲...

  • threejs--自定义矩阵实现全景视觉

    本文需要你有基础的webgl知识,了解矩阵、向量、透视投影、裁剪空间、视图变换和threejs框架等等内容。 在线...

  • 线性代数的本质(笔记2)

    1. 三维空间中的线性变换 把坐标看成相应基向量的缩放image.png 向量变换image.png 三维矩阵相乘...

网友评论

      本文标题:threejs 三维向量Vector3学习

      本文链接:https://www.haomeiwen.com/subject/lmftjdtx.html