计算垂直平面与三维线段交点
三维空间中垂直平面映射到xy平面是一条线段,三维线段映射到xy平面,得到两条xy平面的两条线段。
计算xy平面中两条线段的交点分为两部分内容:
1.判断两条线段是否相交
http://www.cnblogs.com/wuwangchuxin0924/p/6218494.html
2.计算线段的交点
这样能通过第一个条件的,计算出来的交点肯定在线段上,不会在线段延长线上。
https://blog.csdn.net/gongwenkai90/article/details/38519623
函数的参数:
表示垂直平面线段:seg0 线段两个端点:seg0 _P0 seg0_P1
三维空间的线段:seg1 线段两个端点:seg1 _P0 seg1_P1
交点:intersectP 计算交点的高程使用简单的线性插值
bool segmentIntersect(const osg::Vec3& seg0_P0, const osg::Vec3& seg0_P1, const osg::Vec3& seg1_P0, const osg::Vec3& seg1_P1, osg::Vec3& intersectP )
{//首先判断两条线段是否相交{if (!(fmin(seg1_P0.x(), seg1_P1.x()) <= fmax(seg0_P0.x(), seg0_P1.x())&& fmin(seg0_P0.y(), seg0_P1.y()) <= fmax(seg1_P0.y(), seg1_P1.y())&& fmin(seg0_P0.x(), seg0_P1.x()) <= fmax(seg1_P0.x(), seg1_P1.x())&& fmin(seg1_P0.y(), seg1_P1.y()) <= fmax(seg0_P0.y(), seg0_P1.y())))return false;float u, v, w, z;u = (seg0_P0.x() - seg1_P0.x())*(seg1_P1.y() - seg1_P0.y()) - (seg1_P1.x() - seg1_P0.x())*(seg0_P0.y() - seg1_P0.y());v = (seg0_P1.x() - seg1_P0.x())*(seg1_P1.y() - seg1_P0.y()) - (seg1_P1.x() - seg1_P0.x())*(seg0_P1.y() - seg1_P0.y());w = (seg1_P0.x() - seg0_P0.x())*(seg0_P1.y() - seg0_P0.y()) - (seg0_P1.x() - seg0_P0.x())*(seg1_P0.y() - seg0_P0.y());z = (seg1_P1.x() - seg0_P0.x())*(seg0_P1.y() - seg0_P0.y()) - (seg0_P1.x() - seg0_P0.x())*(seg1_P1.y() - seg0_P0.y());if (!(u*v <= FLT_EPSILON && w*z <= FLT_EPSILON)) //排除了平行不共线{return false;}}//计算交点double a0 = seg0_P0.y() - seg0_P1.y();double b0 = seg0_P1.x() - seg0_P0.x();double c0 = seg0_P0.x()*seg0_P1.y() - seg0_P1.x()*seg0_P0.y();double a1 = seg1_P0.y() - seg1_P1.y();double b1 = seg1_P1.x() - seg1_P0.x();double c1 = seg1_P0.x()*seg1_P1.y() - seg1_P1.x()*seg1_P0.y();double D;D = a0*b1 - a1*b0;intersectP.x() = (b0*c1 - b1*c0) / D;intersectP.y() = (c0*a1 - c1*a0) / D;double zLength2_1 =(intersectP._v[0]- seg1_P0._v[0])*(intersectP._v[0] - seg1_P0._v[0]) + (intersectP._v[1] - seg1_P0._v[1])* (intersectP._v[1] - seg1_P0._v[1]);double zLength2_2 = (seg1_P1._v[0] - seg1_P0._v[0])*(seg1_P1._v[0] - seg1_P0._v[0])+ (seg1_P1._v[1] - seg1_P0._v[1])* (seg1_P1._v[1] - seg1_P0._v[1]); //条件1 可以保证 zLength2_2 != 0.0intersectP.z() = seg1_P0.z() + (seg1_P1.z() - seg1_P0.z())*sqrt(zLength2_1 / zLength2_2);return true;}
计算垂直平面与三维线段交点相关推荐
- 向量法计算平面与直线的交点
- 已知有平面上三个点(ABC)坐标,直线上两个点(DE)坐标,求平面ABC与直线DE的交点坐标. 解: /*** 平面与直线的交点* * @param plantA* @param plantB* ...
- 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(4)--(计算透视中心的三维位置)
(一)计算透视中心的三维位置 给出了透视四面体的三个控制点和三条腿的长度,透视中心的三维位置可以确定如下: (1)构造一个平面P1,它相对于平面P-ABL是正交的.这个平面的构造不需要知道透视中心L的 ...
- 平面中判断线段与矩形是否相交
文章目录 1. 原理 2. 实现 3. 参考 1. 原理 这个问题的算法思路挺简单的.分成两步来判断: 判断线段的两个端点是否在矩形内,如果两个端点至少有一个在矩形内,说明线段与矩形相交. 如果两个端 ...
- java 直线交点_[Java教程]谈谈求线段交点的几种算法(js实现,完整版)
[Java教程]谈谈求线段交点的几种算法(js实现,完整版) 0 2014-08-27 10:05:22 "求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面 ...
- js求两圆交点_谈谈求线段交点的几种算法(js实现,完整版)
"求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法总结一下, 希望对大家有所帮助. ...
- js求两圆交点_详解js实现线段交点的三种算法
本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊 引用 已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交) ...
- PCL点云处理之计算两平面交线(五十一)
PCL点云处理之计算两平面交线(五十一) 前言 一.算法说明 二.实验代码: 前言 计算三维空间中,两个平面的交线 一.算法说明 已知: 1号平面的方程为A1x+B1y+C1z+D1=0 2号平面的方 ...
- 焦点弦的垂直平分线和轴的交点到焦点的距离和焦点弦的距离之比为二分之e
焦点弦的垂直平分线和轴的交点到焦点的距离和焦点弦的距离之比为二分之e
- ArcGIS案例学习笔记4_2_城乡规划容积率计算和建筑景观三维动画
ArcGIS案例学习笔记4_2_城乡规划容积率计算和建筑景观三维动画 概述 计划时间:第4天下午 目的:城市规划容积率计算和建筑三维景观动画 教程: pdf page578 数据:实验数据\Chp13 ...
- 计算机可视化视景仿真,计算与仿真、三维设计、图像处理、视景仿真、4k视频剪辑工作站介绍2015版.pptx...
计算与仿真.三维设计.图像处理.视景仿真.4k视频剪辑工作站介绍2015版 图形工作站的历史.现状与品牌差异分类过去(2008年前)现在品牌IBMSUNSGIHP/DELL/联想UltraLAB硬件各 ...
最新文章
- int main( int argc , char *argv[] , char *envp[] )中参数解说
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用...
- jQuery浏览器类型判断和分辨率判断
- sublime text插件emmet的用法教程
- 本机上的ajax需要跨域吗,jQuery AJAX跨域
- flask v0.1 flask.py
- Zabbix 工作原理
- SQL Server 2008:示例数据库安装
- 疯狂Java讲义(十一)---- 初始化块
- java 内省 反射_理解Java的反射与内省及其区别
- link标签 rel=“ alternate“ 应用解析
- 微信 notify url php,微信支付成功后,notify_url 没收到通知
- 畅捷支付显示连接服务器失败,畅捷支付POS机常见错误码解决方法!
- 回溯 + 剪枝 无重复元素的数组 candidates 和一个目标数 target 数字可以无限制重复被选取
- Centos 7.2 安装Docker CE实践并配置加速器
- 基于STM32+0.96寸OLED - - 7脚SPI接线显示+代码解析
- 勿以恶小而为之,勿以善小而不为
- 【Spring学习】AOP实现日志记录
- CSharp(C#)语言_第一章
- VPN 原理以及实现