//------------------------------------------------------------------------
/// Renders the collide model triangle soup.
void TerrainCollisionShape::visualize(Details::OgreOpcodeDebugger* activeDebugger)
{
  mActiveDebugger = activeDebugger;

  assert(mVertexBuf);

  // render the triangle soup
  int i, k;
  k = 0;
  for (i = 0; i < mVerticesPerRow * mVerticesPerRow * 3; i += 9)
      {
        float v0 = mVertexBuf[i + 0];
        float v1 = mVertexBuf[i + 1];
        float v2 = mVertexBuf[i + 2];
        float v3 = mVertexBuf[i + 3];
        float v4 = mVertexBuf[i + 4];
        float v5 = mVertexBuf[i + 5];
        float v6 = mVertexBuf[i + 6];
        float v7 = mVertexBuf[i + 7];
        float v8 = mVertexBuf[i + 8];

        const Matrix4 &m = getFullTransform();

        Vector3 vect0(v0, v1, v2);
        Vector3 vect1(v3, v4, v5);
        Vector3 vect2(v6, v7, v8);
        vect0 = m * vect0;
        vect1 = m * vect1;
        vect2 = m * vect2;

        mActiveDebugger->addShapeLine(vect0.x, vect0.y, vect0.z, vect1.x, vect1.y, vect1.z);
        mActiveDebugger->addShapeLine(vect1.x, vect1.y, vect1.z, vect2.x, vect2.y, vect2.z);
        mActiveDebugger->addShapeLine(vect2.x, vect2.y, vect2.z, vect0.x, vect0.y, vect0.z);
      }
    }
Beispiel #2
0
void BigIntegerStrassen::FastFourierTransform(vcomp &vect, bool invert){
    //static long double PI = 3.14159265358979323846;
    static long double PI = 3.14159265358979323846264338327950288419716939937510L;
    
    ll n = (ll)vect.size();
    if (n == 1)  return;

    vcomp vect0(n / 2), vect1(n / 2);
    for (ll i = 0, j = 0; i<n; i += 2, ++j){
        vect0[j] = vect[i];
        vect1[j] = vect[i + 1];
    }

    FastFourierTransform(vect0, invert);
    FastFourierTransform(vect1, invert);

    long double ang = 2 * PI / n * (invert ? -1 : 1);
    std::complex<long double> w(1), wn(cos(ang), sin(ang));
    for (ll i = 0; i < n / 2; ++i) {
        vect[i] = vect0[i] + w * vect1[i];
        vect[i + n / 2] = vect0[i] - w * vect1[i];
        if (invert){
            vect[i] /= 2;
            vect[i + n / 2] /= 2;
        }
        w *= wn;
    }

}
Beispiel #3
0
const float TripleProduct( const Vertex& v0, const Vertex& v1, const Vertex& v2 )
{
	Vect vect0( v0.x, v0.y, v0.z );
	Vect vect1( v1.x, v1.y, v1.z );
	Vect vect2( v2.x, v2.y, v2.z );

	Vect a = vect2 - vect0;
	Vect b = vect1 - vect0;

	Vect normal( v0.nx, v0.ny, v0.nz );

	return a.cross( b ).dot( normal );
}