threejs 根据离散点生成不规则三角网(三角剖分),检测点是否在该三角网内(区域搜索)

本文主要是介绍threejs 根据离散点生成不规则三角网(三角剖分),检测点是否在该三角网内(区域搜索),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        我们知道threejs中的模型都是一个个三角网组成的,三角网数量越多,模型就越精细。

        在 Three.js 中,你可以通过创建一个三角网格对象来表示三维模型,这个对象通常由一个顶点数组和一个索引数组构成。顶点数组包含了模型的各个顶点的坐标信息,而索引数组则定义了如何将这些顶点连接起来形成三角形。通过修改这些顶点的坐标信息,你可以改变模型的形状,从而实现各种各样的动态效果。

一、导入剖分三角形网格的库

npm install delaunator
//引入
import Delaunator from "delaunator";

 二、计算三角形顶点索引

//传入数据points:[{x:0,y:0,z:0}]
const points3d = points.map((t) => new Vector3(t.x, t.y, t.z));const indexDelaunay = Delaunator.from(points3d.map((v) => {return [v.x, v.z];})
);

三、生成模型

const geom = new BufferGeometry().setFromPoints(points3d);
const meshIndex = [];
for (let i = 0; i < indexDelaunay.triangles.length; i++) {meshIndex.push(indexDelaunay.triangles[i]);
}
geom.setIndex(meshIndex);
const mesh = new Mesh(geom,new MeshBasicMaterial({color: "red",wireframe: true,transparent: true,opacity: 0.5,side: THREE.DoubleSide,//双面展示
}));
scene.add(mesh)//添加到场景

四、检测点是否在网格内        

判断点是否在网格内,并且与网格的垂直距离不超过 (阈值)

思路:

        1.遍历顶点索引,然后取出对应顶点坐标,生成三角形

        2.计算三角形平面法向量,计算点到三角形平面所在距离,如果小于等于某个阈值,就继续检查是否在三角形内部

        3.计算投影点,检查投影点是否在三角形边界上,在就返回true,否则返回false 

这篇关于threejs 根据离散点生成不规则三角网(三角剖分),检测点是否在该三角网内(区域搜索)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979758

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

详解Java中如何使用JFreeChart生成甘特图

《详解Java中如何使用JFreeChart生成甘特图》甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配,在Java开发中,JFreeChart是一个强大的开源图表库,能够生成各种类型的图... 目录引言一、JFreeChart简介二、准备工作三、创建甘特图1. 定义数据集2. 创建甘特图3.

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc