view VectorTypes.cpp @ 1512:af57b3b76fe4

Clean and decouple. (1)
author yoctozepto
date Mon, 02 Sep 2013 15:23:09 +0200
parents ff1867836af5
children 4055b09160ae
line wrap: on
line source

#include "mm7_data.h"

//----- (0044C362) --------------------------------------------------------
void Vec3_int_::Normalize_float()
{
  //Vec3_int_ *v1; // esi@1
  double v2; // st6@1
  float v3; // ST20_4@1
  double v4; // st5@1
  float v5; // ST18_4@1
  double v6; // st4@1
  float v7; // ST14_4@1
  float v8; // ST24_4@1
  float v9; // ST20_4@1
  double v10; // ST0C_8@1
  float v11; // ST18_4@1
  double v12; // ST0C_8@1
  float v13; // ST14_4@1
  double v14; // ST0C_8@1

  assert(false);
  //v1 = this;
  v2 = (double)this->x * 0.000015258789;
  v3 = v2;
  v4 = (double)this->y * 0.000015258789;
  v5 = v4;
  v6 = (double)this->z * 0.000015258789;
  v7 = v6;
  v8 = 1.0 / sqrt(v6 * v6 + v4 * v4 + v2 * v2);
  v9 = v8 * v3 * 65536.0;
  v10 = v9 + 6.7553994e15;
  this->x = LODWORD(v10);
  v11 = v8 * v5 * 65536.0;
  v12 = v11 + 6.7553994e15;
  this->y = LODWORD(v12);
  v13 = v8 * v7 * 65536.0;
  v14 = v13 + 6.7553994e15;
  this->z = LODWORD(v14);
}

//----- (0043AA99) --------------------------------------------------------
void __fastcall Vec3_int_::Rotate(int sDepth, int sRotY, int sRotX, Vec3_int_ v, int *outx, int *outy, int *outz)
{
 float cosf_x = cosf(3.14159265f * sRotX / 1024.0f),
       sinf_x = sinf(3.14159265f * sRotX / 1024.0f),
       cosf_y = cosf(3.14159265f * sRotY / 1024.0f),
       sinf_y = sinf(3.14159265f * sRotY / 1024.0f);

 *outx = v.x + ((unsigned __int64)(sinf_y * (signed __int64)((unsigned __int64)(cosf_x * (signed __int64)sDepth)>> 16)));
 *outy = v.y + ((unsigned __int64)(cosf_y * (signed __int64)((unsigned __int64)(cosf_x * (signed __int64)sDepth)>> 16)));
 *outz = v.z + ((unsigned __int64)(sinf_x * (signed __int64)sDepth) >> 16);
}

//----- (0043AB61) --------------------------------------------------------
void Vec3_int_::Normalize(int *x, int *y, int *z)
{
  *x *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
  *y *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
  *z *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
}