osg 兩個面求交線

2021-07-03 18:57:35 字數 1243 閱讀 7457

麵用osg::matrix  來表示。

osg::vec3 ptori = osg::(0,0,0) * mat;(面的原點)

osg::vec3 vecx = mat.getrotate() * osg::x_axis ;(x軸)

osg::vec3 vecy = mat.getrotate() * osg::y_axis ;(y軸)

要求兩個面的交線,首先要判斷兩個面是否相交,方法是判斷兩個面的z軸夾角,如果夾角差不多為0或者pi那麼認為面不想交,沒有相交。

double angleto(const osg::vec3d &vec1, const osg::vec3d&vec2)

if (dtemp < -1.0)

return acos(dtemp);

}int intersect3dlinesegmentwithplane( const osg::vec3d &linestartpoint, const osg::vec3d &lineendpoint,

const osg::vec3d &planenormal, const osg::vec3d &planepoint, osg::vec3d &intpoint )

else

}double num3 = num2 / num;

if ((num3 < 0.0) || (num3 > 1.0))

intpoint = linestartpoint + other * num3;

return 1;

}// 描述: 求兩個面的交線

// matbase:乙個面的位置矩陣

// matthis: 另外乙個面的位置矩陣

// pt1: 交線點1 (世界座標系)

// pt2: 交線點2 (世界座標系)

// dtolangle: 面夾角容差(如果兩個面夾角小於等於這個值,那麼認為面平行)

// 返回值:是否相交

bool intersectwith( const osg::matrix &matbase, const osg::matrix &matthis,

osg::vec3d &pt1, osg::vec3d &pt2, double dtolangle /*= osg::pi / 36.0*/ )

// 判斷方向

if (dangle - dtolangle > 1.0e-7)

return bok;

}

兩個簡單多邊形求交 CGAL

兩個多邊形求交的實現需要幾個模組 cgal中有insect函式,但是必須要求使用cgal exact predicates exact constructions kernel 本人出於其他想法,沒有把基於exact predicates inexact constructions kernel核的...

求兩個多邊形的交面積(模板)

別人的部落格 多邊形的交,多邊形的邊一定是要按逆時針方向給出 還要判斷是凸包還是凹包,呼叫相應的函式 面積並,只要和面積減去交即可 include using namespace std const int maxn 300 const double eps 1e 8 int dcmp double...

由兩個曲面確定的交線的切向量求解

微積分 有乙個很有啟發性的說法 考慮描述曲面的隱函式f x,y,z 0.其全微分df f x dx f ydy f z dz 0 即 f x,f y,f z dx,d y,dz 0 其中,d x,dy dz 為該曲面的切向量,與 f x,f y,f z 若該梯度存在 垂直.由此可見 f x,f y,...