Цитата(Serj78 @ Mar 30 2008, 13:07)

Кстати, кто-нибудь разбирался с математическими функциями CV с точки зрения быстродействия?
Альтернативные функции работают быстрее?
Интересует тригонометрия:sin, cos, atan2 ...
Я делал так:
float sin (float alfa)
{
int i;
for (i = 0; i <90; i ++)
{
if (alfa > i + 0.5)
{
if (alfa < i + 1.5)
{
switch (i + 1)
{
case 0: return 0; break;
case 1: return 0.0175; break;
case 2: return 0.0349; break;
case 3: return 0.0523; break;
case 4: return 0.0698; break;
case 5: return 0.0872; break;
case 6: return 0.1045; break;
case 7: return 0.1219; break;
case 8: return 0.1392; break;
case 9: return 0.1564; break;
case 10: return 0.1736; break;
case 11: return 0.1908; break;
case 12: return 0.2079; break;
case 13: return 0.2250; break;
case 14: return 0.2419; break;
case 15: return 0.2588; break;
case 16: return 0.2756; break;
case 17: return 0.2924; break;
case 18: return 0.3090; break;
case 19: return 0.3256; break;
case 20: return 0.3420; break;
case 21: return 0.3584; break;
case 22: return 0.3746; break;
case 23: return 0.3907; break;
case 24: return 0.4067; break;
case 25: return 0.4226; break;
case 26: return 0.4384; break;
case 27: return 0.4540; break;
case 28: return 0.4695; break;
case 29: return 0.4848; break;
case 30: return 0.5000; break;
case 31: return 0.5150; break;
case 32: return 0.5299; break;
case 33: return 0.5446; break;
case 34: return 0.5592; break;
case 35: return 0.5736; break;
case 36: return 0.5878; break;
case 37: return 0.6018; break;
case 38: return 0.6157; break;
case 39: return 0.6293; break;
case 40: return 0.6428; break;
case 41: return 0.6561; break;
case 42: return 0.6691; break;
case 43: return 0.6820; break;
case 44: return 0.6947; break;
case 45: return 0.7071; break;
case 46: return 0.7193; break;
case 47: return 0.7314; break;
case 48: return 0.7431; break;
case 49: return 0.7547; break;
case 50: return 0.7660; break;
case 51: return 0.7771; break;
case 52: return 0.7880; break;
case 53: return 0.7986; break;
case 54: return 0.8090; break;
case 55: return 0.8192; break;
case 56: return 0.8290; break;
case 57: return 0.8387; break;
case 58: return 0.8480; break;
case 59: return 0.8572; break;
case 60: return 0.8660; break;
case 61: return 0.8746; break;
case 62: return 0.8829; break;
case 63: return 0.8910; break;
case 64: return 0.8988; break;
case 65: return 0.9063; break;
case 66: return 0.9135; break;
case 67: return 0.9205; break;
case 68: return 0.9272; break;
case 69: return 0.9336; break;
case 70: return 0.9397; break;
case 71: return 0.9455; break;
case 72: return 0.9511; break;
case 73: return 0.9563; break;
case 74: return 0.9613; break;
case 75: return 0.9659; break;
case 76: return 0.9703; break;
case 77: return 0.9744; break;
case 78: return 0.9781; break;
case 79: return 0.9816; break;
case 80: return 0.9848; break;
case 81: return 0.9877; break;
case 82: return 0.9903; break;
case 83: return 0.9925; break;
case 84: return 0.9945; break;
case 85: return 0.9962; break;
case 86: return 0.9976; break;
case 87: return 0.9986; break;
case 88: return 0.9994; break;
case 89: return 0.9998; break;
case 90: return 1.0000; break;
}
}
}
}
if (alfa > 90)
{
if (alfa <= 180){ return sin(alfa - 90);}
else if (alfa <= 270){ return -sin(alfa - 90);}
else if (alfa <= 360){ return -sin(alfa - 270);}
else return sin( alfa - 360);
}
}
float cos(float alfa)
{
if (alfa <= 90) return sin (90 - alfa);
else if (alfa <= 180) return -cos(alfa - 90);
else if (alfa <= 270) return -cos(alfa - 180);
else if (alfa <= 360) return cos(alfa - 270);
else return cos(alfa - 360);
}
Могут быть некоторые ошибки, или что-то криво написанно, критикуйте и напишите если у вас вариант лучше.