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

相关文章

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

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