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


C++ TVector3::magnitude方法代码示例

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


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

示例1: evaluateSuperellipsoid

//   Try to find the root of a superquadric using Newtons method.
bool PrimitiveSuperellipsoid::checkHit2( const TRay &ray, const float t0,
					 TVector3 &P0, float v0,
					 const float t1,
					 float *t, TVector3 &Q ) const {
  float dt0 = t0;
  float dt1 = t0 + 0.0001f * (t1 - t0);
  float maxdelta = t1 - t0;

  for ( int i = 0; (dt0 < t1) && (i < MAX_ITERATIONS); i++ ) {
    float deltat = 0.0f;
    TPoint3 P1 = ray.origin + ( ray.direction * dt1 );
    float v1 = evaluateSuperellipsoid( P1 );
    if ( v0 * v1 < 0.0f ) {
      // Found a crossing point, go back and use normal root solving.
      solveHit1( v0, P0, v1, P1, Q );
      TVector3 P0 = Q - ray.origin;
      *t = P0.magnitude();
      return true;
    }
    else {
      if ( fabsf(v1) < ZERO_TOLERANCE) {
	Q = ray.origin + ( ray.direction * dt1 );
	*t = dt1;
	return true;
      }
      else {
        if (((v0 > 0.0f) && (v1 > v0)) || ((v0 < 0.0f) && (v1 < v0)))
          // We definitely failed
          break;
        else {
          if ( v1 == v0 )
            break;
          else
            deltat = v1 * (dt1 - dt0) / (v1 - v0);
        }
      }
    }

    if ( fabsf(deltat) > maxdelta )
       break;

    v0 = v1;
    dt0 = dt1;
    dt1 -= deltat;
  }

  return false;
}
开发者ID:SinaC,项目名称:OldRaytrace,代码行数:49,代码来源:superellipsoid.cpp


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