MapGIS Objects Java计算一条三维线段与一个三角形所在的平面的交点 - 教程

news/2025/10/23 19:15:51/文章来源:https://www.cnblogs.com/lxjshuju/p/19161436

计算一条三维线段与一个三角形所在的平面的交点

一、介绍

MapGIS Objects SDK : 是一款组件式地理信息开发平台,提供全空间数据存储、管理、显示、编辑、查询、分析、制图输出等二三维一体化核心 GIS 功能,提供 C++、.NET、Java、Python 等开发资源,接口简单易用,性能优越,具备跨平台开发能力。

本篇内容将引导您如何使用 MapGIS Objects SDK 实现如何在三维场景中根据一个三维点计算其到一条三维线段的垂足点。

二、开发环境

软件版本下载地址说明
MapGIS 10 x64 All In One SDK for Windows10.7开发包下载地址MapGIS 提供的一款地理信息开发平台,包含 MapGIS Objects Java 面向 Java 开发环境的跨平台组件式 GIS 开发资源。
MapGIS 开发授权\开发授权下载地址MapGIS 针对开发者提供开发授权,下载开发包并安装后,还需要获取开发授权才能正常使用。
IntelliJ IDEA2020.3 以上版本IDEA 下载地址一款适用于 Java 专业开发的集成开发环境(IDE)。
JDK1.8JDK 下载地址JDK 是 Java 语言的软件开发工具包,JDK 是整个 java 开发的核心,它包含了 JAVA 的运行环境(JVM+Java 系统类库)和 JAVA 工具。

三、几何原理

计算一条线段与一个平面的交点,需要首先判断这条线段是否与平面相交,如果相交则计算其交点。判断是否相交的算法在前面的文章中已经详细进行了说明,作为该算法的延续,当得到了线段两个端点(向量 P0、P1)到平面的距离,如 len1 和 len2 之后,通过判断 len1*len2<=0 则相交,如果线段与平面相交,可通过线性插值的思想,来计算其交点向量 P,具体算法:P=P0+t*(P1-P0),其中 t=-1*len1/(len2-len1)。

四、算法实现

本篇以 MapGIS Objects Java 实现算法的基本思想,对于 MapGIS Objects Java 的开发入门在此不做赘述,详情可参考MapGIS Objects Java 的开发入门文档,api 文档参考 MapGIS Objects Java API。

1.实现向量叉乘

public Dot3D crossMultiVector(Dot3D dot1,Dot3D dot2){
Dot3D rDot = new Dot3D();
rDot.setX(dot1.getY() * dot2.getZ() - dot1.getZ() * dot2.getY());
rDot.setY(dot1.getZ() * dot2.getX() - dot1.getX() * dot2.getZ());
rDot.setZ(dot1.getX() * dot2.getY() - dot1.getY() * dot2.getX());
return rDot;
}

2.计算单位法向量

public Dot3D computerNormal(Dot3D dotA,Dot3D dotB,Dot3D dotC){
//向量AB
Dot3D ab = new Dot3D();
ab.setX(dotB.getX()-dotA.getX());
ab.setY(dotB.getY()-dotA.getY());
ab.setZ(dotB.getZ()-dotA.getZ());
//向量AC
Dot3D ac = new Dot3D();
ac.setX(dotC.getX()-dotA.getX());
ac.setY(dotC.getY()-dotA.getY());
ac.setZ(dotC.getZ()-dotA.getZ());
//向量叉乘计算法向量
Dot3D pNormal=crossMultiVector(ab,ac);
//计算法向量模长
double len = Math.sqrt(Math.pow(pNormal.getX(),2)+Math.pow(pNormal.getY(),2)+Math.pow(pNormal.getZ(),2));
//计算单位法向量
pNormal.setX(pNormal.getX()/len);
pNormal.setY(pNormal.getY()/len);
pNormal.setZ(pNormal.getZ()/len);
return  pNormal;
}

3.计算点到平面的距离

//通过点法式构建平面方程计算点到平面距离
public double computerDistanceToPlane(Dot3D pNormal,Dot3D dotPlane,Dot3D dotP){
double nx = pNormal.getX();
double ny = pNormal.getY();
double nz = pNormal.getZ();
double len =nx*dotP.getX()+ny*dotP.getY()+nz*dotP.getZ()-(nx*dotPlane.getX()+ny*dotPlane.getY()+nz*dotPlane.getZ());
return len;
}

4.判断线段是否与平面相交

public boolean isIntersectWithPlane(Dot3D sDot,Dot3D eDot,Dot3D planeDot1,Dot3D planeDot2,Dot3D planeDot3){
//1、计算平面单位法向量
Dot3D pNormal = computerNormal(planeDot1,planeDot2,planeDot3);
//2、计算线段的两个端点到平面距离
double len1 = computerDistanceToPlane(pNormal,planeDot1,sDot);
double len2 = computerDistanceToPlane(pNormal,planeDot1,eDot);
//3、判断线段是否与平面相交
if(len1*len2>0){
return  false;
}
else{
return  true;
}
}

5.计算线段与平面的交点

public Dot3D ComputerIntersectDotInPlane(Dot3D sDot,Dot3D eDot,Dot3D planeDot1,Dot3D planeDot2,Dot3D planeDot3){
//1、计算平面单位法向量
Dot3D pNormal = computerNormal(planeDot1,planeDot2,planeDot3);
//2、计算线段的两个端点到平面距离
double len1 = computerDistanceToPlane(pNormal,planeDot1,sDot);
double len2 = computerDistanceToPlane(pNormal,planeDot1,eDot);
//3、线性插值计算交点
if(len1<1e-3){
return  sDot;
}
if(len2<1e-3){
return eDot;
}
if(len1*len2<0){
double t = -len1 / (len2 - len1);
Dot3D pDot = new Dot3D();
pDot.setX(sDot.getX()+t*(eDot.getX()-sDot.getX()));
pDot.setY(sDot.getY()+t*(eDot.getY()-sDot.getY()));
pDot.setZ(sDot.getZ()+t*(eDot.getZ()-sDot.getZ()));
return  pDot;
}
else{
return  null;
}
}

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

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

相关文章

layui时间与日期选择器,时间范围查询数据,后端springboot

需求 我需要根据时间段,比如10.1号——10月31号,查询此时间段的对应数据。 实体类 user:含有姓名,性别。其中有个入职时间private Date interviewTime; 我们需要根据入职时间,查询指定范围的数据 前端<div cla…

读书笔记:OpenPBR 规范(2)

3. 模型 ​ ​​​  使用前述的公式和参数化方法,我们现在来具体说明 OpenPBR 表面模型的结构。我们首先描述“非薄壁”情况(“薄壁”情况下的结构有所不同),其材质结构非正式地如下图所示:​ ​​​  总而言…

轻量级图片信息解析程序

简介 平时的工作中我经常需要获取图片文件的一些基本信息(宽度、高度、通道数、色深)。因为项目依赖 opencv,以前都是直接用的 opencv 来读入图片后获取这些信息的,opencv 读入图片是读取所有的数据,会影响效率和…

2025.10.23 闲话-全局位运算 max 的解法

我不会。2025.10.23 闲话-全局位运算 \(max\) 的解法 三部分将使用不同的策略求解。 Part.1 \(xor-max\) 这一类问题算是最简单的,每次插入一个数,在 \(Trie\) 树上跳,先查询这个数产生的最大值。 查询时如果当前位…

express 模块学习 - 东方不败-

01.js// npm i express@4.17.1 // npm i -g nodemon // nodemon xx.js const express = require(express) const app = express() app.listen(3000,()=>{console.log("hello zhangdan") })app.get(/user…

习题-无限集与选择公理

习题1. 不用选择公理定义一个单射\(f:\mathbb{Z}_+\rightarrow X^{\omega}\),其中\(X\)为二元素集\(\{0,1\}\)。2. 如果有可能的话,试对下列各个集族不用选择公理而求出来一个选择函数。(a) \(\mathbb{Z}_+\)的所有非…

Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试及其解决方法

这一报错意味着当前试图使用的端口被占用。 一般情况下使用 netstat -ano|findstr <port> 就可以查出来,然后taskkill /pid <id>/F就好 但这次没有查出有使用,但确实有报错。经查是docker容器里预先跑的…

题解:CF2115F1 Gellyfish and Lycoris Radiata (Easy Version)

节选自:Codeforces Round 1028 (Div. 1) 这题非常好玩,也非常达芬,我做了 \(1\) 天半才过。 我们考虑到问题是在线,因此可以想到支持在线的操作分块(虽然我没想到),每 \(\sqrt q\) 个操作分成一个操作块。考虑到…

项目管理软件是不是伪需求?

我发现尤其是这几年,和老板们聊天,只要一说到项目管理,就绕不开工具这个话题。现在市面上各种项目管理软件层出不穷,从任务看板到进度甘特图,从即时沟通到自动汇报,功能越来越多,让人眼花缭乱。 所以老板们也常…

2025内窥镜/内窥镜电缆线/B超线厂家推荐明秀电子,专业制造品质可靠

2025内窥镜/内窥镜电缆线/B超线厂家推荐明秀电子,专业制造品质可靠 技术挑战与行业痛点:数据揭示的严峻现实 医疗内窥镜领域正面临前所未有的技术挑战。据统计,全球内窥镜设备故障中,电缆线相关问题占比高达42%,其…

2025低烟无卤/UL3302/UL3767/UL4413辐照线厂家推荐明秀电子,专业认证品质保障

2025低烟无卤/UL3302/UL3767/UL4413辐照线厂家推荐明秀电子,专业认证品质保障 技术挑战:安全标准升级下的行业困境 随着全球电子设备安全标准的不断提升,低烟无卤线缆行业正面临着前所未有的技术挑战。UL3302低烟无…

2025.10.23考试记录

T1 题意 将给定的正整数 \(n\),表示为只包含数字 \(1\) 的加数的和,每个加数可正可负。 分析 看起来是一道构造题,令 \(a_i\) 表示由 \(i\) 个 \(1\) 组成的正整数,注意到每个 \(a_i\) 的使用次数都可以通过增加 \…

低代码如何成为业务与IT的沟通桥梁?破解数字化转型中的协作难题

在企业数字化转型的漫长旅途中,最令人疲惫的或许不是技术的复杂度,而是沟通的摩擦力。业务部门用“市场语言”描绘着一幅宏伟蓝图,而IT部门用“技术语言”回应着一串现实约束。双方都在为同一个目标努力,却仿佛说着…

2025铁氟龙/极细铁氟龙/UL系列高温线厂家推荐明秀电子,专业耐用品质保障!

2025铁氟龙/极细铁氟龙/UL系列高温线技术突破与行业趋势分析 在电子设备日益精密化、微型化的今天,高温线材作为关键连接组件,其性能表现直接影响整个系统的可靠性和使用寿命。铁氟龙高温线、极细铁氟龙线以及UL1006…

LIS 略解

这是一个非常经典的问题。 有两种解法,一种是 \(\mathcal O(n ^ 2)\) 的动态规划做法,一种是 \(\mathcal O(n \log n)\) 的贪心做法。动态规划做法设 \(dp_i\) 为以第 \(i\) 个数字结尾的最长单调增加序列。 然后枚举…

低代码如何引爆全员创新?揭秘技术民主化背后的蒲公英效应

创新,对于许多企业而言,曾是一种奢侈的、被集中管理的资源。它通常被禁锢在特定的研发部门或创新实验室里,依赖于少数“天才”的灵光一现。然而,在当今瞬息万变的市场环境中,这种“中心化”的创新模式已显得力不从…

低代码如何重塑IT部门价值?

在传统的企业财务报表上,IT部门常常被归类为“成本中心”。这个标签背后,是无数个日夜的加班运维、应对不完的业务需求、以及难以量化的价值输出。IT团队深陷于开发“救火”和系统“补漏”的循环中,虽有苦劳,却难论…

2025工业冰水机/冷水机厂家推荐东莞市凯诺机械,高效制冷稳定运行

2025工业冰水机/冷水机厂家推荐:高效制冷稳定运行新标杆 当前工业温控设备领域的技术挑战与突破 工业冰水机、工业冷水机作为现代制造业不可或缺的温控设备,正面临着前所未有的技术挑战。根据行业数据显示,传统工业…

2025小型低温/工业/风冷/一体式螺杆冷冻机厂家推荐:东莞凯诺机械专业制冷解决方案

2025小型低温/工业/风冷/一体式螺杆冷冻机厂家推荐:东莞凯诺机械专业制冷解决方案 在工业制冷领域,小型低温冷冻机、工业风冷机组和一体式螺杆冷冻机正面临着前所未有的技术挑战。随着2025年制造业升级的加速推进,这…

2025水冷螺杆/风冷螺杆冷水机厂家推荐东莞市凯诺机械,高效制冷稳定可靠

2025水冷螺杆/风冷螺杆冷水机厂家推荐东莞市凯诺机械,高效制冷稳定可靠 在工业制冷领域,水冷螺杆和风冷螺杆冷水机作为关键温控设备,其性能表现直接关系到生产效率和能源消耗。随着2025年能效标准的逐步实施,行业面…