Three.js几何计算Line3、Triangle、Ray、Plane

Threejs封装了一些和几何计算相关的API,比如线段Line3、三角形Triangle、射线Ray、平面Plane...

线段Line3

通过起始点定义一条线段。

// 创建一个线段对象Line3

var line3 = new THREE.Line3();

// 线段起点坐标

line3.start = new THREE.Vector3(0, 0, 0);

// 线段终点坐标

line3.end = new THREE.Vector3(10, 10, 10);

计算线段中点,或者说计算两点的中点

// 创建一个三维向量对象表示线段中点

var center = new THREE.Vector3();

// 执行getCenter方法计算线段中点,结果保存到参数

line3.getCenter(center)

console.log('查看线段中点', center);

计算线段的距离,或者说计算两点之间的距离

// 计算线段长度

var L = line3.distance();

console.log('查看线段距离', L);

// 计算线段长度平方

var L2 = line3.distanceSq();

console.log('查看线段距离平方', L2);

可以通过向量对象Vector3的.distanceTo()方法计算两点之间距离

// 线段起点坐标

var p1 = new THREE.Vector3(0, 0, 0);

// 线段终点坐标

var p2 = new THREE.Vector3(10, 10, 10);

// Vector3的方法distanceTo()计算两点之间距离

var length = p1.distanceTo(p2)

console.log('两点之间距离', length);

射线Ray

// 创建射线对象Ray

var ray = new THREE.Ray()

// 设置射线起点

ray.origin = new THREE.Vector3(1,0,3);

// 设置射线方向

ray.direction = new THREE.Vector3(1,1,1).normalize();

通过射线Ray的.intersectTriangle()方法判断射线和一个三角形区域是否相交,如果相交返回交点坐标,不相交返回null。

// 三角形三个点坐标

var p1 = new THREE.Vector3(20, 0, 0);

var p2 = new THREE.Vector3(0, 0, 10);

var p3 = new THREE.Vector3(0, 30, 0);

// 相交返回交点,不相交返回null

var result = ray.intersectTriangle(p1,p2,p3)

console.log('查看是否相交', result);

通过射线Ray的.intersectsBox(Box3)方法判断射线和一个包围盒Box3是否相交,通过射线Ray的.intersectsSphere(Sphere)方法判断射线和一个包围球Sphere是否相交...

三角形Triangle

// 创建一个三角形对象

var Triangle = new THREE.Triangle()

// 三角形顶点1

Triangle.a = new THREE.Vector3(20, 0, 0);

// 三角形顶点2

Triangle.b = new THREE.Vector3(0, 0, 10);

// 三角形顶点3

Triangle.c = new THREE.Vector3(0, 30, 0);

通过三角形对象Triangle的.getArea()方法可以计算一个三角形区域的面积,如果你想计算一个网格模型的表面,就可以遍历网格模型对应几何体所有的三角形区域计算面积然后累加。

// .getArea()方法返回三角形面积

var S = Triangle.getArea();

console.log('三角形面积', S);

通过三角形对象Triangle的.getMidpoint()方法计算三角形重心,封装的算法就是三个顶点坐标的算术平均值。

var Midpoint = new THREE.Vector3();

// 计算三角形重心,结果保存在参数Midpoint

Triangle.getMidpoint(Midpoint);

console.log('三角形重心', Midpoint);

通过三角形对象Triangle的.getNormal()方法计算三角形法线方向,封装的算法简单说就是两条边构成的向量叉乘后获得垂直三角形面的向量。

var normal = new THREE.Vector3();

// 计算三角形法线方向,结果保存在参数normal

Triangle.getNormal(normal);

console.log('三角形法线', normal);

平面Plane

通过平面法线方向.normal和平面到坐标原点距离.constant来定义一个平面对象Plane

// 创建一个平面对象Plane

var plane = new THREE.Plane();

// 设置平面法线方向

plane.normal = new THREE.Vector3(0, 1, 0);

// 坐标原点到平面的距离,区分正负

plane.constant = 30;

执行平面对象方法.setFromCoplanarPoints(a,b,c)通过三个顶点坐标来设置一个平面对象Plane,三个点按照逆时针顺序来确定平面对象的法向量normal方向。

// 创建一个平面对象Plane

var plane = new THREE.Plane();

// 三个点坐标

var p1 = new THREE.Vector3(20, 0, 0);

var p2 = new THREE.Vector3(0, 0, 10);

var p3 = new THREE.Vector3(0, 30, 0);

// 通过三个点定义一个平面

plane.setFromCoplanarPoints(p1,p2,p3);

console.log('plane.normal', plane.normal);

console.log('plane.constant', plane.constant);

通过平面对象的.distanceToPoint(point)方法计算点到平面的垂线距离。

var point = new THREE.Vector3(20, 100, 330);

// 计算空间中一点到平面的垂直距离

var L = plane.distanceToPoint(point);

console.log('点到平面距离', L);

java鱼雷3的几何_Three.js几何计算Line3、Triangle、Ray、Plane相关推荐

  1. pythondevp2p_以太坊GO、JAVA、PYTHON、RUBY、JS客户端介绍

    原标题:以太坊GO.JAVA.PYTHON.RUBY.JS客户端介绍 区块链兄弟社区,区块链技术专业问答先行者,中国区块链技术爱好者聚集地 作者:佚名 来源:CSDN 原文链接:http://blog ...

  2. 几何画板是哪方面的计算机应用,几何画板在几何中的奇妙应用

    原标题:几何画板在几何中的奇妙应用 高一数学学科论坛 几何画板在|几何中的 奇 妙 应 用 当今世界日益信息化,信息日益网络化,<几何画板>正是现代信息技术中改变学生学习方式,促进教师数学 ...

  3. 我用纯C语言开发的中英文混合分词服务器3.0正式发布,词库190多万词,每秒切分5万+,同时提供 c、java、C#、delphi、js调用范例

    我用纯C语言开发的中英文混合分词服务器3.0正式发布,词库190多万词,每秒切分5万+,同时提供 c.java.C#.delphi.js调用范例 百万商业圈中英文混合分词服务器3.0正式发布, 绝对稳 ...

  4. 6月29日云栖精选夜读:Java、PHP、Python、JS 等开发者都如何绘制统计图

    原文链接 目前很多程序员绘图基本上都是采用后端生成数据传递给前端,然后前端将数据渲染到绘图库上面进行显示,从而得到我们最后看到的各种图,但是有时候,我们发现需要传递的数据很多很多,那么这个时候如果将数 ...

  5. Java与JS金额计算去掉小数部分的方法

    由于除法.编程语言等特性,小数计算总是可能无法获取到精确的结果.但是金额计算又要求有精确的结果,这样的矛盾可以通过整数计算加去除小数部分来获取想要的结果. 乘法: 单价为9.99元的某物品购买9个,总 ...

  6. c++几何类和几何简单工厂模式

    直接上报告了,不想再修改了 里面有很多算法都是学习其他朋友的,希望体谅 代码都是自己一句一句写的,不容易,有问题可以评论区见 一.实习题目 1.实现一个集合类 CSet(完成代码并测试运行),能够存储 ...

  7. java中日期计算时间差,java中依据,两个日期,计算时间差

    java中根据,两个日期,计算时间差. 分别获取两个时间的毫秒数Date.getTime(),相减,得到的值/1000为秒数,/60*1000为分钟数,/60*60*1000为小时数. /** * 计 ...

  8. java类求圆的面积周长_java编程 1. 设计一个求圆的面积和周长的类,要求:1计算当半径r,JAVA编程题。编写一个应用程序计算圆的周长和面积,设圆的半...

    问题标题 java编程 1. 设计一个求圆的面积和周长的类,要求:1计算当半径r,JAVA编程题.编写一个应用程序计算圆的周长和面积,设圆的半 2019-5-23来自ip:15.196.194.53的 ...

  9. three.js重新计算UV

    three.js重新计算UV 在three.js中使用uv贴图的时候需要物体有正确的uv.使用three自带的方法生成的几何体uv通常是理想的.当我们使用svg或者其他数据来生成的几何体uv通常是混乱 ...

最新文章

  1. 月薪20k-50k| 西人马3D机器视觉算法、语音识别、DSP软件工程师招聘
  2. Git常用命令总结(超实用)
  3. Iterator主要有三个方法:hasNext()、next()、remove()详解
  4. OKExChain主网支持EVM,OKB、OKT都将成为“铲子”
  5. Selenium之Action Chains类
  6. 六千字干货文:到底要怎么去学算法?
  7. 用例图中三种关系详解(转)
  8. Python3.5.3下载及安装教程
  9. 一个据说可以让瑞星ravmond.exe崩溃的网站
  10. python颜色对照表及颜色搭配
  11. 访问网站提示:您未被授权查看该页恢复办法
  12. 矿大计算机考研上岸分数,2021--2022中国矿业大学动力工程考研上岸心得及分数线报录比...
  13. 哈工大计算机网络考研题,哈工大计算机考研历年复试试题(完全版).PDF
  14. 【网页设计】HTML+CSS保护野生动物北极熊介绍网页设计专题
  15. 拍手数据集_我如何(重新)建立中等拍手效果-以及从实验中得到的结果。
  16. SCI最全写作思维导图
  17. 详细:Source Insight 4.0 延长试用期方法,图文教程
  18. 计算机图像图形设计制作 步骤,第三章  威尔克姆教程:图形的专门制作方法...
  19. 01_JavaScript书写格式
  20. 如何在vmware15上安装linux镜像

热门文章

  1. Unity 使场景整体变暗
  2. python批量下载马拉松照片
  3. 大数据免费自学马拉松计划
  4. python split() 功法大全
  5. 数据结构树(Tree)详解
  6. Docker——docker-registry私有仓库集群构建
  7. spinnaker 持续部署
  8. 发邮件报Failed to send email: Could not connect to SMTP host: smtp.exmail.qq.com, port: 465, response:-1
  9. 简洁小米侧边栏--看pink老师(Html+CSS课程)的笔记记录
  10. c语言编写1000以内素数的函数6,C语言求1000以内的素数