?? utils.cpp
字號:
#include "utils.h"
// ilog2
// Input: int
// Output: int
// Compute the ceiling of the log base 2 -- used to find the smallest
// power of two required to hold a texture width or height
int ilog2(int x)
{
/*
// Slower floating-point-math attempt
int power = 0.0;
double fLogof2 = 0.0;
if (fLogof2 <= 0)
fLogof2 = log(2);
return (int) ceil( log( (double) x ) / fLogof2 );
*/
// My own faster bitwise approach
int powercount = 0;
int current = x;
int evenpower = 0;
while (current > 0)
{
current = current >> 1;
powercount++;
}
evenpower = 1 << (powercount - 1);
if ( x == evenpower )
powercount--;
return powercount;
}
// EvenPower
// Input: int
// Output: int
// Use ilog2 to find the smallest power of two
// required to hold a texture width or height
int EvenPower(int x)
{
int power = ilog2(x);
return 1 << power;
}
// DoubleIsZero
// Input: double
// Output: bool
// Is the number small enough to be considered zero?
bool DoubleIsZero(double val)
{
return (fabs(val) < 1.0E-6);
}
double GetVectorAngle(double x, double y)
{
double angle = 0.0;
bool xzero = DoubleIsZero(x);
bool yzero = DoubleIsZero(y);
if ( xzero || yzero )
{
if ( xzero != yzero )
{
if (x > 0.0)
angle = 90.0;
else if (x < 0.0)
angle = 270.0;
else if (y < 0.0)
angle = 180.0;
}
}
else
{
double rawangle = atan(fabs(x/y)) * 180.0 / PI;
if (x > 0.0)
{
if (y > 0.0)
angle = rawangle; // +x, +y
else
angle = 90.0 + rawangle; // +x, -y
}
else
{
if (y > 0.0)
angle = 270.0 + rawangle; // -x, +y
else
angle = 180.0 + rawangle; // -x, -y
}
}
return angle;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -