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


C++ PropertyMap::GetQuaternion方法代码示例

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


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

示例1: Average

  SQuaternion Average( const CSymmetryType & oSym, Iterator pBegin, Iterator pEnd,
                       PropertyMap oMap )
  {
    vector<SQuaternion> oSymOpList = oSym.GetQuatOperatorList();
    vector<SQuaternion> oCloudAverage( oSymOpList.size()  );
    for( Size_Type n = 0; n < oSymOpList.size(); n ++ )
    {
      oCloudAverage[n] = oMap.GetQuaternion( *pBegin ) * oSymOpList[n];
      oCloudAverage[n].ToConvention();      
    }

    vector<Int> oCloudPointsList( oSymOpList.size(), 1 );
    for( Iterator pCur = (pBegin + 1); pCur != pEnd; ++ pCur )
    {
      for( Size_Type n = 0; n < oSymOpList.size(); n ++ )
      {
        Int nCloudIndex = 0;
        SQuaternion q = oMap.GetQuaternion( *pCur ) * oSymOpList[ n ];;
        Float fMinDist = 200;
        for( Size_Type m = 0; m < oSymOpList.size(); m ++ )  // find cloud
        {
          SQuaternion qProd = q.Inverse() * oCloudAverage[m];
          Float fDist =  Float( 2 ) * acos( std::min( Float( 1 ), qProd.m_fW ) );
          if( fDist < fMinDist )
          {
            fMinDist = fDist;
            nCloudIndex = m;
          }
        }

        Int nPoints = oCloudPointsList[ nCloudIndex ];
        SQuaternion & qAve = oCloudAverage[ nCloudIndex ];
        q.ToConvention();
        
        qAve.m_fX = ( ( qAve.m_fX * nPoints  ) + q.m_fX );
        qAve.m_fY = ( ( qAve.m_fY * nPoints  ) + q.m_fY );
        qAve.m_fZ = ( ( qAve.m_fZ * nPoints  ) + q.m_fZ );
        qAve.m_fW = ( ( qAve.m_fW * nPoints  ) + q.m_fW );
        qAve = qAve / qAve.EuclideanNorm();
        qAve.ToConvention();
       oCloudPointsList[ nCloudIndex ] ++;
      }
      
    }
    
    SQuaternion oOrientationAverage;
    oOrientationAverage.Set( 0, 0, 0, 0 );
    for( Size_Type n = 0; n < oSymOpList.size(); n ++ )
    {
      oCloudAverage[n] = ReduceToFundamentalZone( oSym, oCloudAverage[n] );
      oCloudAverage[n].ToConvention();
      oOrientationAverage += oCloudAverage[n];
    }

    oOrientationAverage = oOrientationAverage / oOrientationAverage.EuclideanNorm();
    
    return oOrientationAverage;
  }
开发者ID:CMU-Suter-Group,项目名称:XDMXX,代码行数:58,代码来源:Symmetry.tmpl.cpp


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