当前位置: 首页>>代码示例>>C++>>正文


C++ Wvec::set方法代码示例

本文整理汇总了C++中Wvec::set方法的典型用法代码示例。如果您正苦于以下问题:C++ Wvec::set方法的具体用法?C++ Wvec::set怎么用?C++ Wvec::set使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Wvec的用法示例。


在下文中一共展示了Wvec::set方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: snap

NDCpt 
Bface::nearest_pt_ndc(CNDCpt& p, Wvec &bc, int &is_on_tri) const 
{
   // Bsimplex virtual method

   // same as above, but operates in NDC space

   // get barycentric coords:
   NDCpt a = _v1->ndc();
   NDCpt b = _v2->ndc();
   NDCpt c = _v3->ndc();
   double A = signed_area_ndc(a, b, c);
   double u = signed_area_ndc(p, b, c) / A;
   double v = signed_area_ndc(a, p, c) / A;
   bc.set(u, v, 1 - u - v);
   
   // to account for numerical errors, snap
   // near-zero values to 0 and renormalize
   snap(bc);

   if (bc[0] < 0 || bc[1] < 0 || bc[2] < 0) {
      // p is outside the triangle.
      // find closest point to an edge:
      is_on_tri = 0;
      double t1, t2, t3;

      NDCpt p1 = pt_near_seg_ndc(a,b,p,t1);
      NDCpt p2 = pt_near_seg_ndc(b,c,p,t2);
      NDCpt p3 = pt_near_seg_ndc(c,a,p,t3);

      double d1 = p.dist_sqrd(p1);
      double d2 = p.dist_sqrd(p2);
      double d3 = p.dist_sqrd(p3);

      if (d1 < d2) {
         if (d1 < d3) {
            bc.set(1-t1,t1,0);
            return p1;
         }
         bc.set(t3,0,1-t3);
         return p3;
      }
      if (d2 < d3) {
         bc.set(0,1-t2,t2);
         return p2;
      }
      bc.set(t3,0,1-t3);
      return p3;
   }

   is_on_tri = 1;
   return (a*bc[0]) + (b*bc[1]) + (c*bc[2]);
}
开发者ID:QuLogic,项目名称:jot-lib,代码行数:53,代码来源:bface.cpp

示例2: if

Wpt
Bedge::nearest_pt(CWpt& p, Wvec &bc, bool &is_on_simplex) const
{
    Wvec ab = _v2->loc() - _v1->loc();
    Wvec ac = p - _v1->loc();

    double dot = (ab * ac) / ab.length_sqrd();
    bc.set(1-dot, dot, 0);

    if (dot < gEpsZeroMath) {
        bc.set(1, 0, 0);
        is_on_simplex = (dot >= 0);
    } else if (1-dot < gEpsZeroMath) {
        bc.set(0, 1, 0);
        is_on_simplex = (dot <= 1);
    }

    return (bc[0] * _v1->loc()) + (bc[1] * _v2->loc());
}
开发者ID:karmakat,项目名称:jot-lib,代码行数:19,代码来源:bedge.C

示例3: clamp_barycentric

 static void clamp_barycentric(Wvec &bc) {
    bc.set(max(bc[0],0.0), max(bc[1],0.0), max(bc[2],0.0));
    bc /= (bc[0] + bc[1] + bc[2]);
 }
开发者ID:QuLogic,项目名称:jot-lib,代码行数:4,代码来源:bsimplex.hpp

示例4: vec

void
Bedge::project_barycentric(CWpt &p, Wvec &bc) const
{
    double t = ((p - _v1->loc()) * vec()) / sqr(length());
    bc.set(1.0 - t, t, 0);
}
开发者ID:karmakat,项目名称:jot-lib,代码行数:6,代码来源:bedge.C


注:本文中的Wvec::set方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。