osgUtil::PolygonIntersector多面体与模型求交

osg3.4版本的有问题,特别是一个比较大的三角形包含一部分多面体,他的计算过程是每次计算三角形的一条边与多面体求交,这种情况就无法计算多面体内部覆盖的三角部分

osg3.6.4版本更新了计算方法,但是有个Bug,需要修改PolygonIntersectorUtil::IntersectFunctor::contains()中,dest.swap(src)之后,添加:

src.push_back(src.front());

即新计算的点需要形成闭环,否则计算结果不正确

原文地址:https://www.cnblogs.com/coolbear/p/12636156.html

时间: 2024-08-01 14:13:25

osgUtil::PolygonIntersector多面体与模型求交的相关文章

[NetTopologySuite](2)任意多边形求交

任意多边形求交: private void btnPolygon_Click(object sender, EventArgs e) { double[] Xs = new double[] { 30, 260, 130, 350, 250, 330, 320, 180, 250, 50, 70, 60, 30, 260 }; double[] Ys = new double[] { 140, 260, 110, 150, 230, 210, 140, 260 }; int m = Xs.Len

POJ1408-Fishnet(线段求交)

Fishnet Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1788   Accepted: 1144 Description A fisherman named Etadokah awoke in a very small island. He could see calm, beautiful and blue sea around the island. The previous night he had enc

ray与triangle/quad求交二三事

引擎中,ray与quad求交,算法未细看,但有求解二次方程,不解.ray与triangle求交,使用的是97年经典算法,仔细看过论文,多谢小武同学指点,用到了克拉默法则求解线性方程组.想模仿该方法,做ray与quad的求交,发现方程里不仅有u和v,还有uv,没法变换成线性方程组的形式.本以为引擎中quad中四个点可以不共面,看过接口,不然,“不共面和退化的多边形不保证正确结果“.而后又有两个问题,一是,与一个quad求交比与两个三角形求交快吗?二是,如果前面的问题答案为否,即两个三角形更快,为何

三角形求交算法

在光线追踪中,我们常常要处理对于Mesh的渲染,由于Mesh一般由一个个三角形所构成,因此需要我们去计算光线和Mesh每个三角形之间是否存在交点.这可以看做是一个射线和三角形的求交问题.<Fundamentals of Computer Graphics (3rd edition)>中提出了一个in-place的算法,在这里予以介绍. 设光线的起点为e,方向为d,三角形三个顶点为a,b,c.那么可以得到: e+td=a+β(b-a)+γ(c-a) 其中,β.γ为三角形的重心坐标.β+γ<

OpenCASCADE圆与平面求交

OpenCASCADE圆与平面求交 [email protected] 在 解析几何求交之圆与二次曲面中分析了OpenCASCADE提供的类IntAna_IntConicQuad可以用来计算圆与二次曲面之间的交点,这个算法是将平面Plane作为二次曲面的一个特例来处理,最后主要是对三角函数方程进行求解. 当直接使用圆和平面作为参数时,IntAna_IntConicQuad重载了函数Perform来对圆和平面进行求交计算,这时的算法与前面解三角函数不同,代码如下: void IntAna_IntC

【模板】线性基求交

线性基求交 struct lb{ ll p[63]; lb(){ memset(p,0,sizeof(p)); } void clear(){ memset(p,0,sizeof(p)); } void ins(ll x){ for(int i=60;i>=0;i--) if((x>>i)&1){ if(!p[i]){ p[i]=x; return; }else x^=p[i]; } } }; lb merge(lb a,lb b){ lb g=lb(),tmp=a; ll cu

OpenCASCADE 平面与球面求交

OpenCASCADE 平面与球面求交 [email protected] OpenCASCADE提供了类IntAna_QuadQuadGeo用来计算两个二次曲面quadric(球面.圆柱面.圆锥面及平面,平面是二次曲面的特例)之间的交线.他们之间可能的结果有: l 一个点 l 一条或两条直线 l 一个点和一条直线 l 圆 l 椭圆 l 抛物线 l 双曲线 将源码结合<高等数学>.<解析几何>等书,可以来学习如何将理论付诸实践.本文主要介绍这个类中平面与球面求交的源码实现.  将源

You can Solve a Geometry Problem too(线段求交)

http://acm.hdu.edu.cn/showproblem.php?pid=1086 You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8861    Accepted Submission(s): 4317 Problem Description Many

面向对象 (11)求交并集 判断字符形式

题目1:创建两个线性表,分别存储{“chen”,“wang”,“liu”,“zhang”}和{“chen”,“hu”,“zhang”},求这两个线性表的交集和并集. 一.源程序 /**两个线性表{“chen”,“wang”,“liu”,“zhang”}和{“chen”,“hu”,“zhang”}的交集和并集 * 1个方法 */ package cn.edu.ccut.w1125t1; import java.util.ArrayList; public class Main { public s