📄 kernel_ftc3.h
字号:
CGAL_KERNEL_MEDIUM_INLINEtypename Equal_to<FT>::result_typeequal_directionC3(const FT &dx1, const FT &dy1, const FT &dz1, const FT &dx2, const FT &dy2, const FT &dz2){ return sign_of_determinant2x2(dx1, dy1, dx2, dy2) == ZERO && sign_of_determinant2x2(dx1, dz1, dx2, dz2) == ZERO && sign_of_determinant2x2(dy1, dz1, dy2, dz2) == ZERO && CGAL_NTS sign(dx1) == CGAL_NTS sign(dx2) && CGAL_NTS sign(dy1) == CGAL_NTS sign(dy2) && CGAL_NTS sign(dz1) == CGAL_NTS sign(dz2);}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Equal_to<FT>::result_typeequal_planeC3(const FT &ha, const FT &hb, const FT &hc, const FT &hd, const FT &pa, const FT &pb, const FT &pc, const FT &pd){ typedef typename Sgn<FT>::result_type Sg; if (!equal_directionC3(ha, hb, hc, pa, pb, pc)) return false; // Not parallel. Sg s1a = CGAL_NTS sign(ha); if (s1a != ZERO) return s1a == CGAL_NTS sign(pa) && sign_of_determinant2x2(pa, pd, ha, hd) == ZERO; Sg s1b = CGAL_NTS sign(hb); if (s1b != ZERO) return s1b == CGAL_NTS sign(pb) && sign_of_determinant2x2(pb, pd, hb, hd) == ZERO; return CGAL_NTS sign(pc) == CGAL_NTS sign(hc) && sign_of_determinant2x2(pc, pd, hc, hd) == ZERO;}template <class FT >CGAL_KERNEL_LARGE_INLINEtypename Same_uncertainty_nt<Oriented_side, FT>::typeside_of_oriented_planeC3(const FT &a, const FT &b, const FT &c, const FT &d, const FT &px, const FT &py, const FT &pz){ return enum_cast<Oriented_side>(CGAL_NTS sign(a*px + b*py + c*pz +d));}template <class FT >CGAL_KERNEL_LARGE_INLINEtypename Same_uncertainty_nt<Oriented_side, FT>::typeside_of_oriented_sphereC3(const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz, const FT &rx, const FT &ry, const FT &rz, const FT &sx, const FT &sy, const FT &sz, const FT &tx, const FT &ty, const FT &tz){ FT ptx = px - tx; FT pty = py - ty; FT ptz = pz - tz; FT pt2 = CGAL_NTS square(ptx) + CGAL_NTS square(pty) + CGAL_NTS square(ptz); FT qtx = qx - tx; FT qty = qy - ty; FT qtz = qz - tz; FT qt2 = CGAL_NTS square(qtx) + CGAL_NTS square(qty) + CGAL_NTS square(qtz); FT rtx = rx - tx; FT rty = ry - ty; FT rtz = rz - tz; FT rt2 = CGAL_NTS square(rtx) + CGAL_NTS square(rty) + CGAL_NTS square(rtz); FT stx = sx - tx; FT sty = sy - ty; FT stz = sz - tz; FT st2 = CGAL_NTS square(stx) + CGAL_NTS square(sty) + CGAL_NTS square(stz); return enum_cast<Oriented_side>(sign_of_determinant4x4(ptx,pty,ptz,pt2, rtx,rty,rtz,rt2, qtx,qty,qtz,qt2, stx,sty,stz,st2));}template <class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Same_uncertainty_nt<Bounded_side, FT>::typeside_of_bounded_sphereC3(const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz, const FT &rx, const FT &ry, const FT &rz, const FT &sx, const FT &sy, const FT &sz, const FT &tx, const FT &ty, const FT &tz){ return enum_cast<Bounded_side>( side_of_oriented_sphereC3(px, py, pz, qx, qy, qz, rx, ry, rz, sx, sy, sz, tx, ty, tz) * orientationC3(px, py, pz, qx, qy, qz, rx, ry, rz, sx, sy, sz) );}template <class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Same_uncertainty_nt<Bounded_side, FT>::typeside_of_bounded_sphereC3(const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz, const FT &tx, const FT &ty, const FT &tz){ // Returns whether T lies inside or outside the sphere which diameter is PQ. return enum_cast<Bounded_side>( CGAL_NTS sign((tx-px)*(qx-tx) + (ty-py)*(qy-ty) + (tz-pz)*(qz-tz)) );}template < class FT >CGAL_KERNEL_INLINEtypename Compare<FT>::result_typecmp_dist_to_pointC3(const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz, const FT &rx, const FT &ry, const FT &rz){ return CGAL_NTS compare(squared_distanceC3(px,py,pz,qx,qy,qz), squared_distanceC3(px,py,pz,rx,ry,rz));}// Because of the way the filtered predicates generator script works,// cmp_dist_to_pointC3() must be defined _before_ ths following one.template <class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Same_uncertainty_nt<Bounded_side, FT>::typeside_of_bounded_sphereC3(const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz, const FT &sx, const FT &sy, const FT &sz, const FT &tx, const FT &ty, const FT &tz){ // Returns whether T lies inside or outside the sphere which equatorial // circle is PQR. // This code is inspired by the one of circumcenterC3(3 points). FT psx = px-sx; FT psy = py-sy; FT psz = pz-sz; FT ps2 = CGAL_NTS square(psx) + CGAL_NTS square(psy) + CGAL_NTS square(psz); FT qsx = qx-sx; FT qsy = qy-sy; FT qsz = qz-sz; FT qs2 = CGAL_NTS square(qsx) + CGAL_NTS square(qsy) + CGAL_NTS square(qsz); FT rsx = psy*qsz-psz*qsy; FT rsy = psz*qsx-psx*qsz; FT rsz = psx*qsy-psy*qsx; FT tsx = tx-sx; FT tsy = ty-sy; FT tsz = tz-sz; FT num_x = ps2 * det2x2_by_formula(qsy,qsz,rsy,rsz) - qs2 * det2x2_by_formula(psy,psz,rsy,rsz); FT num_y = ps2 * det2x2_by_formula(qsx,qsz,rsx,rsz) - qs2 * det2x2_by_formula(psx,psz,rsx,rsz); FT num_z = ps2 * det2x2_by_formula(qsx,qsy,rsx,rsy) - qs2 * det2x2_by_formula(psx,psy,rsx,rsy); FT den2 = 2 * det3x3_by_formula(psx,psy,psz, qsx,qsy,qsz, rsx,rsy,rsz); // The following could be simplified a bit. return enum_cast<Bounded_side>( cmp_dist_to_pointC3<FT>(num_x, - num_y, num_z, psx*den2, psy*den2, psz*den2, tsx*den2, tsy*den2, tsz*den2) );}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Equal_to<FT>::result_typehas_larger_dist_to_pointC3(const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz, const FT &rx, const FT &ry, const FT &rz){ return cmp_dist_to_pointC3(px,py,pz,qx,qy,qz,rx,ry,rz) == LARGER;}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Equal_to<FT>::result_typehas_smaller_dist_to_pointC3(const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz, const FT &rx, const FT &ry, const FT &rz){ return cmp_dist_to_pointC3(px,py,pz,qx,qy,qz,rx,ry,rz) == SMALLER;}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Compare<FT>::result_typecmp_signed_dist_to_directionC3( const FT &pa, const FT &pb, const FT &pc, const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz){ return CGAL_NTS compare(scaled_distance_to_directionC3(pa,pb,pc,px,py,pz), scaled_distance_to_directionC3(pa,pb,pc,qx,qy,qz));}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Equal_to<FT>::result_typehas_larger_signed_dist_to_directionC3( const FT &pa, const FT &pb, const FT &pc, const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz){ return cmp_signed_dist_to_directionC3(pa,pb,pc,px,py,pz,qx,qy,qz) == LARGER;}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Equal_to<FT>::result_typehas_smaller_signed_dist_to_directionC3( const FT &pa, const FT &pb, const FT &pc, const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz){ return cmp_signed_dist_to_directionC3(pa,pb,pc,px,py,pz,qx,qy,qz) == SMALLER;}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Compare<FT>::result_typecmp_signed_dist_to_planeC3( const FT &ppx, const FT &ppy, const FT &ppz, const FT &pqx, const FT &pqy, const FT &pqz, const FT &prx, const FT &pry, const FT &prz, const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz){ return enum_cast<Comparison_result>(sign_of_determinant3x3<FT>( pqx-ppx, pqy-ppy, pqz-ppz, prx-ppx, pry-ppy, prz-ppz, px-qx, py-qy, pz-qz));}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Equal_to<FT>::result_typehas_larger_signed_dist_to_planeC3( const FT &ppx, const FT &ppy, const FT &ppz, const FT &pqx, const FT &pqy, const FT &pqz, const FT &prx, const FT &pry, const FT &prz, const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz){ return cmp_signed_dist_to_planeC3(ppx, ppy, ppz, pqx, pqy, pqz, prx, pry, prz, px, py, pz, qx, qy, qz) == LARGER;}template < class FT >CGAL_KERNEL_MEDIUM_INLINEtypename Equal_to<FT>::result_typehas_smaller_signed_dist_to_planeC3( const FT &ppx, const FT &ppy, const FT &ppz, const FT &pqx, const FT &pqy, const FT &pqz, const FT &prx, const FT &pry, const FT &prz, const FT &px, const FT &py, const FT &pz, const FT &qx, const FT &qy, const FT &qz){ return cmp_signed_dist_to_planeC3(ppx, ppy, ppz, pqx, pqy, pqz, prx, pry, prz, px, py, pz, qx, qy, qz) == SMALLER;}CGAL_END_NAMESPACE#endif // CGAL_PREDICATES_KERNEL_FTC3_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -