This Project Has Not Released Any Files
ONGEOによる半直線とNurbs曲面群との交点計算手順
1. ONGEO_SphereTree *stを構築する。
2. 半直線 ON_3dRay rayを定義する。
3. ONGEO_SphereTree_RayIntersectTest(st, ray, results)でざっくり干渉テストを実施する。
4. 3.で得られたresultsの各要素をresultとして、下記を実施する。
4-1. 干渉したベジエ曲面を取得
ON_BezierSurface &bez = st->bezs[result.bez_index];
4-2. bezを有効範囲でトリム
bez.Trim(0, result.uint), bez.Trim(1, result.vint);
4-3. 干渉したNurbs曲面番号と、そのUVレンジを取得
int nbsurf_index = ONGEO_SphereTree_GetNurbsIntervalFromBezIndex(st, nbsurfs, result.bez_index, range);
4-4. result.uintとresult.vintをNurbs曲面上のUV範囲に変換する。
nbrange[0] = range[0].ParameterAt(result.uint), nbrange[1] = range[1].ParameterAt(result.vint);
4-5. QuasiInterpolating法で交点計算
ONGEO_IntersectRayBezier_QuasiInterpolating(ray, bez, tuvs, ptsrf, ptlin, トレランス);
4-6. 得られた交点毎に必要に応じて固有の処理を実施
なお、tuvsの各要素をtuvとすると、tuv[0]:直線パラメータ、tuv[1]:ベジエ曲面Uパラメータ、tuv[2]:ベジエ曲面Vパラメータとなり、tuv[1]、tuv[2]は nbrange[0 or 1].ParameterAt(tuv[1 or 2])によりNurbs曲面のUV値に変換できます。
[PageInfo]
LastUpdate: 2013-03-10 02:04:31, ModifiedBy: mocchi_2012
[Permissions]
view:all, edit:login users, delete/config:members