⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernel_ftc3.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
📖 第 1 页 / 共 2 页
字号:
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 + -