Three 平面(Plane)和 三维几何线段(Line3)

平面(Plane)

在三维空间中无限延伸的二维平面,平面方程用单位长度的法向量和常数表示为海塞法向量Hessian normal form形式。

构造器(Constructor)

Plane( normal : Vector3, constant : Float )

normal - (可选参数) 定义单位长度的平面法向量Vector3。默认值为 (1, 0, 0)
constant - (可选参数) 从原点到平面的有符号距离。 默认值为 0.

属性(Properties)

# .normal : Vector3

# .constant : Float

方法(Methods)

# .applyMatrix4 ( matrix : Matrix4, optionalNormalMatrix : Matrix3 ) : Plane

matrix - 要应用的四位矩阵(Matrix4)。
optionalNormalMatrix - (可选参数) 预先计算好的上述Matrix4参数的法线矩阵 Matrix3。

在平面上应用矩阵。矩阵必须是仿射齐次变换。
如果提供一个optionalNormalMatrix,可以这样创建: var optionalNormalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );

# .clone () : Plane

返回一个与当前平面有相同法线 normal,常量 constant 距离的平面。

# .coplanarPoint ( target : Vector3 ) : Vector3

target — 结果会拷贝到该向量中。

返回一个共面点,通过原点的法向量在平面上投影算得。

# .copy ( plane : Plane ) : Plane

拷贝给定平面,将其中的法线 normal,距离常量 constant属性拷贝给该对象。

# .distanceToPoint ( point : Vector3 ) : Float

var plane1 = new THREE.Plane(new THREE.Vector3(0,1,0), -10); 
plane1.distanceToPoint(new THREE.Vector3(0,1,0))//返回-9

返回点point到平面的有符号距离。

# .distanceToSphere ( sphere : Sphere ) : Float

var plane = new THREE.Plane(new THREE.Vector3(0,1,0), -10);
var sphere = new THREE.Sphere(new THREE.Vector3(0,0,0), 5);
plane.distanceToSphere(sphere)//返回-15
//three.js distanceToSphere源码
distanceToSphere: function ( sphere ) {return this.distanceToPoint( sphere.center ) - sphere.radius;
},

返回球面 sphere 的边缘到平面的最短距离。

# .equals ( plane : Plane ) : Boolean

检查两个平面是否相等。(法线 normal 以及常量 constant 都相同)。

# .intersectLine ( line : Line3, target : Vector3 ) : Vector3

var line1 = new THREE.Line3(new THREE.Vector3(0,0,0), new THREE.Vector3(9,9,9)); 
var line2 = new THREE.Line3(new THREE.Vector3(0,0,0), new THREE.Vector3(11,11,11)); 
console.log(plane.intersectLine(line1))//返回undefined 
console.log(plane.intersectLine(line2))//返回Vector3 {x: 10, y: 10, z: 10}

line - 检测是否相交的三维几何线段 Line3。
target — 结果将会写入该向量中。

返回给定线段和平面的交点。如果不相交则返回undefined。如果线与平面共面,则返回该线段的起始点。

# .intersectsBox ( box : Box3 ) : Boolean

box - 检查是否相交的包围盒 Box3。

确定该平面是否与给定3d包围盒Box3相交。

# .intersectsLine ( line : Line3 ) : Boolean

var line1 = new THREE.Line3(new THREE.Vector3(0,0,0), new THREE.Vector3(9,9,9)); 
var line2 = new THREE.Line3(new THREE.Vector3(0,0,0), new THREE.Vector3(11,11,11)); 
console.log(plane.intersectLine(line1))//返回false 
console.log(plane.intersectLine(line2))//返回true

line - 检查是否相交的三维线段 Line3。

测试线段是否与平面相交。

# .intersectsSphere ( sphere : Sphere ) : Boolean

sphere - 检查是否相交的球体 Sphere。

确定该平面是否与给定球体 Sphere 相交。

# .negate () : Plane

将法向量与常量求反(乘以-1)。

# .normalize () : Plane

//首先我们通过构造函数,并且两个法向量方向相同模长不同,因为返回的constant相同,实际上得到的是相同的平面,因为法向量默认是归一化了的 
var plane1 = new THREE.Plane(new THREE.Vector3(2,2,0), -20);
//constant: -20,normal: Vector3 {x: 2, y: 2, z: 0} 
var plane2 = new THREE.Plane(new THREE.Vector3(1,1,0), -20);
//constant: -20,normal: Vector3 {x: 1, y: 1, z: 0} 
//然后我们将其归一化,这是两个plane的constant,也会随着归一化的比例调整,所以实际效果的距离相差一倍。 
var plane_n1 = plane1.normalize();
//返回constant: -7.071067811865475,normal: Vector3 {x: 0.7071067811865475, y: 0.7071067811865475, z: 0} 
var plane_n2 = plane2.normalize();
//返回constant: -14.14213562373095,normal: Vector3 {x: 0.7071067811865475, y: 0.7071067811865475, z: 0}

归一化法向量 normal ,并相应的调整常量 constant数值。

# .projectPoint ( point : Vector3, target : Vector3 ) : Vector3

var plane = new THREE.Plane(new THREE.Vector3(0,1,0), -10); 
plane.projectPoint(new THREE.Vector3(1,1,1));//返回(1,10,1)

point - 需要投射到该平面的点。
target — 在该平面上离投射点最近的点。

将一个点point投射到该平面上。

# .set ( normal : Vector3, constant : Float ) : Plane

new THREE.Plane().set(new THREE.Vector3(0,1,0), -10);

这里可要注意plane的法向量为new THREE.Vector3(0,1,0)代表平面的正方向是沿Y轴向上的,距离-10代表平面到原点的距离,符号代表和法向量的方向相反,所以这个这个平面在Y轴正方向。 

normal - 单位长度的向量表示平面的法向量。
constant - 原点到平面有符号距离。默认值为 0

设置平面 normal 的法线和常量 constant 属性值。

# .setComponents ( x : Float, y : Float, z : Float, w : Float ) : Plane

x - 单位长度法向量的x值。
y - 单位长度法向量的y值。
z - 单位长度法向量的z值。
w - 原点沿法向量到平面常量 constant 距离。

new THREE.Plane().setComponents(0,1,0,-10);

设置定义平面的各个变量。

# .setFromCoplanarPoints ( a : Vector3, b : Vector3, c : Vector3 ) : Plane

a - 用于确定平面的第一个点。
b - 用于确定平面的第二个点。
c - 用于确定平面的第三个点。

new THREE.Plane().setFromNormalAndCoplanarPoint(new THREE.Vector3(0,1,0), new THREE.Vector3(10,10,10));

根据给定的三个点确定平面。如果三个点共线将会抛出错误。通过右手螺旋规则确定(向量叉乘)法向量 normal。

# .setFromNormalAndCoplanarPoint ( normal : Vector3, point : Vector3 ) : Plane this : Vector3

normal - 平面单位法向量
point - 平面上的点

通过平面上的一点以及法线确定原点到平面的最短距离(常量)。

# .translate ( offset : Vector3 ) : Plane

offset - 平移量

将平面平移给定向量大小,注意:这只会影响平面的常量不会影响平面的法向量。

三维几何线段(Line3)

用起点和终点表示的几何线段。

构造器(Constructor)

Line3( start : Vector3, end : Vector3 )

start - 线段的起始点。默认值为 (0, 0, 0)。
end - 线段的终点。默认值为 (0, 0, 0)。

创建一个三维几何线段 Line3。

属性(Properties)

# .start : Vector3

Vector3 表示线段的起点。

# .end : Vector3

Vector3 表示线段的终点

方法(Methods)

# .applyMatrix4 ( matrix : Matrix4 ) : Line3

对此线段应用矩阵变换。

# .at ( t : Float, target : Vector3 ) : Vector3

t - 使用值0-1返回沿线段的位置。
target — 计算结果会被拷贝到target。

返回一个线段某一位置的向量,当 t = 0的时候返回起始点,当t = 1的时候返回终点。

# .clone () : Line3

返回一个与此线段拥有相同起始点 start 和 终点end 的线段。

# .closestPointToPoint ( point : Vector3, clampToLine : Boolean, target : Vector3 ) : Vector3

point - 用于计算线段上到该点最近的点。
clampToLine - 是否将结果限制在线段起始点和终点之间。
target — 结果会拷贝到target。

返回线段上到point最近的点。如果参数 clampToLine 为true。返回值将会在线段之间。

# .closestPointToPointParameter ( point : Vector3, clampToLine : Boolean ) : Float

point - 用于计算返回值的点
clampToLine - 结果是否处于 [0, 1]之间。

返回一个基于点投影到线段上的点的参数。如果 clampToLine 为true则返回值将在0到1之间。

# .copy ( line : Line3 ) : Line3

拷贝传入线段的起始点 start 和终点 end 向量到当前线段。

# .delta ( target : Vector3 ) : Vector3

target — 结果将会拷贝到target。

返回线段的向量。(终点end向量减去起始点start向量)。

# .distance () : Float

Returns the Euclidean distance (straight-line distance) between the line's start and end points.

# .distanceSq () : Float

返回起始点start和终点end的欧几里得距离Euclidean distance。(直线距离)

# .equals ( line : Line3 ) : Boolean

line - Line3 to compare with this one.

如果给定线段与当前线段的起始点start和终点end都相同则返回true。

# .getCenter ( target : Vector3 ) : Vector3

target — 结果会写入target。

返回线段的中心点。

# .set ( start : Vector3, end : Vector3 ) : Line3

start - 设置线段的起点 start point。
end - 设置线段的终点 end point。

将传入的向量设置到线段的起始点和终点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【公益案例展】亚运天穹——践行亚运理念,筑牢安全防线

‍ 安恒信息公益案例 本项目案例由安恒信息投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2024中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 杭州第19届亚运会是中国第三次举办亚洲最高规格的国际综合…

217.贪心算法:加油站(力扣)

代码解决 class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int curtotol 0; // 当前累积油量int tatol 0; // 总的油量减去总的花费油量int start 0; // 起始加油站的索引// 遍历所有加油站for (int i 0; i &…

AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?

ajax 的全称 Asynchronous JavaScript and XML (异步 JavaScript 和 XML)。 AJAX是一种创建交互式网页应用的网页开发技术。其中最核心的依赖是浏览器提供的 XMLHttpRequest 对象&#xff0c;是这个对象使得浏览器可以发出 HTTP 请求与接收 HTTP 响应。实现了在页 面不刷新的…

try catch 解决大问题

项目开发中遇到一个棘手的bug&#xff0c;react前端项目独自运行时一切正常&#xff0c;但是把项目集成到使用wujie的大平台微前端项目中之后&#xff0c;突然有个地方无故报错&#xff0c;导致程序运行停止&#xff0c;后续的方法不再执行。报错如下&#xff1a; DOMExceptio…

5款文案生成神器,自动一键生成原创文案

文案在我们的生活中随处可见&#xff0c;好的文案内容不仅可以为企业带来销售转化&#xff0c;而且还能提升品牌的影响力&#xff0c;因此文案的重要性可想而知&#xff0c;对于文案创作者来说&#xff0c;写作好的文案不是轻松容易的事&#xff0c;但如果把这个任务交给文案生…

C++ 函数返回值是void* 使用场景

函数返回值为 void* 的使用场景主要涉及以下几个方面&#xff1a; 1、 通用指针传递 void* 是一种通用指针类型&#xff0c;可以指向任何类型的数据。在某些情况下&#xff0c;你可能需要编写一个函数&#xff0c;该函数可以返回指向不同类型数据的指针。使用 void* 可以实现…

Python中的null是什么?

在知乎上遇到一个问题&#xff0c;说&#xff1a;计算机中的「null」怎么读&#xff1f; null正确的发音是/n^l/&#xff0c;有点类似四声‘纳儿’&#xff0c;在计算机中null是一种类型&#xff0c;代表空字符&#xff0c;没有与任何一个值绑定并且存储空间也没有存储值。 P…

MySQL CONCAT函数的简单使用

CONCAT函数用于将mysql中查询多列的值拼成一列显示&#xff0c; 使用示例&#xff1a; SELECT CONCAT(attr_name,"&#xff1a;",attr_value) FROM pms_sku_sale_attr_value WHERE sku_id1; 上面SQL语句使用CONCAT函数将attr_name、attr_value两列的值拼成一列&am…

动态sql 单选变多选

实体类 添加数组存储值 private ArrayList tssjfjList; <!-- <if test"tssjfj ! null and tssjfj ! ">and tssjfj #{tssjfj}</if>--><if test"tssjfjList ! null and tssjfjList.size() > 0">AND tssjfj IN<fo…

JeecgBoot 前端 vue3 项目,配置项目多页面入口

前端 vue3配置项目多页面入口 1.项目根目录新建home.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…

Rust Hello

首先还是安装&#xff1a; 一定要换源&#xff0c;否则真的太慢了。 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh 就是~/.cargo/config [source.crates-io] # 替换成你偏好的镜像源 replace-with tuna# 清华大学 5mb [source.tuna] registry "htt…

数字信号处理教程(4)—— 离散傅里叶变换DFT

今天继续数字信号处理的学习&#xff0c;本次我们将来聊聊离散傅里叶变换DFT(Discrete Fourier Transform)。DFT是数字信号处理领域中应 用最为广泛的离散变换。DFT将一个序列x(n)映射到频率域。DFT 的许多性质都与对模拟信号进行傅里叶变换的性质相同。里面包含着大量的算法值…

Spring IOC深入理解之源码实现

1、Spring IOC的理解 IOC&#xff1a;Inversion Of Control&#xff0c;即控制反转&#xff0c;是一种设计思想。在传统的 Java SE 程序设计中&#xff0c;我们直接在对象内部通过 new 的方式来创建对象&#xff0c;是程序主动创建依赖对象&#xff1b;而在Spring程序设计中&a…

论文研读:ViT-V-Net—用于无监督3D医学图像配准的Vision Transformer

目录 摘要 介绍 方法 VIT-V-Net体系结构 损失函数 图像相似性度量 变形场正则化 结果与讨论 摘要 在过去的十年里&#xff0c;卷积神经网络(ConvNets)在各种医学成像应用中占据了主导地位并取得了最先进的性能。然而&#xff0c;由于缺乏对图像中远程空间关系的理解&a…

Gitlab CI/CD介绍

基本概念 GitLab CI/CD&#xff08;持续集成/持续部署&#xff09;流水线是GitLab平台提供的一项强大功能&#xff0c;旨在通过自动化构建、测试和部署过程&#xff0c;提高开发团队的效率和软件发布的质量。 CI&#xff08;Continuous Integration&#xff09;&#xff1a;持续…

QT5.12.9 通过MinGW64 / MinGW32 cmake编译Opencv4.5.1

一、安装前准备: 1.安装QT,QT5.12.9官方下载链接:https://download.qt.io/archive/qt/5.12/5.12.9/ QT安装教程:https://blog.csdn.net/Mark_md/article/details/108614209 如果电脑是64位就编译器选择MinGW64,32位就选择MinGW32,我的是MinGW64。 2.opencv源码下载:h…

linux登入提示信息

目录 1.Linux 登录提示信息在操作系统中扮演着重要的角色 安全性提醒 欢迎信息 系统状态通知 政策和使用条款 技术支持信息 更新和变更通知 2.配置文件介绍 3.编辑配置文件 4.效果展示 修改前 修改后 “如果您在解决类似问题时也遇到了困难&#xff0c;希望我的经…

ActiViz实战:基于ActiViz 9.2的医学影像三维重建MPR的简单示例

文章目录 效果预览核心代码源码地址总结效果预览 基于ActiViz 9.2的医学影像三维重建之MPR重建 核心代码 vtkProperty ipwProp = vtkProperty.New(); vtkImagePlaneWidget[] planeWidget = new vtkImagePlaneWidget

面试题 14- I. 剪绳子

剪绳子 题目描述示例 题解 题目描述 给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n>1并且m>1&#xff09;&#xff0c;每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0] * k[1] *...* k[m-1] 可能的最大乘积…

14-50 剑和诗人24 - 开源 AI 的下一个重大飞跃:多个小模型与大模型相媲美

介绍 大型语言模型 (LLM) 领域最近取得了快速进展&#xff0c;GPT-4、PaLM-2、Llama-2 等模型正在突破 AI 对语言处理能力的界限。然而&#xff0c;只有少数几家大型科技公司拥有训练包含数千亿个参数的模型所需的大量计算资源&#xff0c;才能使用最大的模型。 作为回应&…