begin process at 2010 02 10 15:28:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > APPROXIMATION DU SIN, COS, TAN, ACOS...

APPROXIMATION DU SIN, COS, TAN, ACOS...


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :09/07/2003 Date de mise à jour :09/07/2003 17:05:54 Vu :2 867

Auteur : psy4meuh

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voilà,

c'est des méthodes de ma classe Math, qui calculent les fonctions trigo de facon approximative... mais pas tant que ca, celà suffit dans bien des cas.... en plus très rapide comparé aux fonctions standar...



Source

  • //----------------------------------------------------------------------
  • Real Math::FastSin0 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = 7.61e-03f;
  • fResult *= fASqr;
  • fResult -= 1.6605e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • fResult *= fAngle;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastSin1 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = -2.39e-08f;
  • fResult *= fASqr;
  • fResult += 2.7526e-06f;
  • fResult *= fASqr;
  • fResult -= 1.98409e-04f;
  • fResult *= fASqr;
  • fResult += 8.3333315e-03f;
  • fResult *= fASqr;
  • fResult -= 1.666666664e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • fResult *= fAngle;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastCos0 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = 3.705e-02f;
  • fResult *= fASqr;
  • fResult -= 4.967e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastCos1 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = -2.605e-07f;
  • fResult *= fASqr;
  • fResult += 2.47609e-05f;
  • fResult *= fASqr;
  • fResult -= 1.3888397e-03f;
  • fResult *= fASqr;
  • fResult += 4.16666418e-02f;
  • fResult *= fASqr;
  • fResult -= 4.999999963e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastTan0 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = 2.033e-01f;
  • fResult *= fASqr;
  • fResult += 3.1755e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • fResult *= fAngle;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastTan1 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = 9.5168091e-03f;
  • fResult *= fASqr;
  • fResult += 2.900525e-03f;
  • fResult *= fASqr;
  • fResult += 2.45650893e-02f;
  • fResult *= fASqr;
  • fResult += 5.33740603e-02f;
  • fResult *= fASqr;
  • fResult += 1.333923995e-01f;
  • fResult *= fASqr;
  • fResult += 3.333314036e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • fResult *= fAngle;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastInvSin (Real fValue)
  • {
  • Real fRoot = Math::Sqrt(1.0f-fValue);
  • Real fResult = -0.0187293f;
  • fResult *= fValue;
  • fResult += 0.0742610f;
  • fResult *= fValue;
  • fResult -= 0.2121144f;
  • fResult *= fValue;
  • fResult += 1.5707288f;
  • fResult = HALF_PI - fRoot*fResult;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastInvCos (Real fValue)
  • {
  • Real fRoot = Math::Sqrt(1.0f-fValue);
  • Real fResult = -0.0187293f;
  • fResult *= fValue;
  • fResult += 0.0742610f;
  • fResult *= fValue;
  • fResult -= 0.2121144f;
  • fResult *= fValue;
  • fResult += 1.5707288f;
  • fResult *= fRoot;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastInvTan0 (Real fValue)
  • {
  • Real fVSqr = fValue*fValue;
  • Real fResult = 0.0208351f;
  • fResult *= fVSqr;
  • fResult -= 0.085133f;
  • fResult *= fVSqr;
  • fResult += 0.180141f;
  • fResult *= fVSqr;
  • fResult -= 0.3302995f;
  • fResult *= fVSqr;
  • fResult += 0.999866f;
  • fResult *= fValue;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastInvTan1 (Real fValue)
  • {
  • Real fVSqr = fValue*fValue;
  • Real fResult = 0.0028662257f;
  • fResult *= fVSqr;
  • fResult -= 0.0161657367f;
  • fResult *= fVSqr;
  • fResult += 0.0429096138f;
  • fResult *= fVSqr;
  • fResult -= 0.0752896400f;
  • fResult *= fVSqr;
  • fResult += 0.1065626393f;
  • fResult *= fVSqr;
  • fResult -= 0.1420889944f;
  • fResult *= fVSqr;
  • fResult += 0.1999355085f;
  • fResult *= fVSqr;
  • fResult -= 0.3333314528f;
  • fResult *= fVSqr;
  • fResult += 1.0f;
  • fResult *= fValue;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
//----------------------------------------------------------------------
Real Math::FastSin0 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = 7.61e-03f;
    fResult *= fASqr;
    fResult -= 1.6605e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    fResult *= fAngle;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastSin1 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = -2.39e-08f;
    fResult *= fASqr;
    fResult += 2.7526e-06f;
    fResult *= fASqr;
    fResult -= 1.98409e-04f;
    fResult *= fASqr;
    fResult += 8.3333315e-03f;
    fResult *= fASqr;
    fResult -= 1.666666664e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    fResult *= fAngle;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastCos0 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = 3.705e-02f;
    fResult *= fASqr;
    fResult -= 4.967e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastCos1 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = -2.605e-07f;
    fResult *= fASqr;
    fResult += 2.47609e-05f;
    fResult *= fASqr;
    fResult -= 1.3888397e-03f;
    fResult *= fASqr;
    fResult += 4.16666418e-02f;
    fResult *= fASqr;
    fResult -= 4.999999963e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastTan0 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = 2.033e-01f;
    fResult *= fASqr;
    fResult += 3.1755e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    fResult *= fAngle;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastTan1 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = 9.5168091e-03f;
    fResult *= fASqr;
    fResult += 2.900525e-03f;
    fResult *= fASqr;
    fResult += 2.45650893e-02f;
    fResult *= fASqr;
    fResult += 5.33740603e-02f;
    fResult *= fASqr;
    fResult += 1.333923995e-01f;
    fResult *= fASqr;
    fResult += 3.333314036e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    fResult *= fAngle;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastInvSin (Real fValue)
{
    Real fRoot = Math::Sqrt(1.0f-fValue);
    Real fResult = -0.0187293f;
    fResult *= fValue;
    fResult += 0.0742610f;
    fResult *= fValue;
    fResult -= 0.2121144f;
    fResult *= fValue;
    fResult += 1.5707288f;
    fResult = HALF_PI - fRoot*fResult;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastInvCos (Real fValue)
{
    Real fRoot = Math::Sqrt(1.0f-fValue);
    Real fResult = -0.0187293f;
    fResult *= fValue;
    fResult += 0.0742610f;
    fResult *= fValue;
    fResult -= 0.2121144f;
    fResult *= fValue;
    fResult += 1.5707288f;
    fResult *= fRoot;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastInvTan0 (Real fValue)
{
    Real fVSqr = fValue*fValue;
    Real fResult = 0.0208351f;
    fResult *= fVSqr;
    fResult -= 0.085133f;
    fResult *= fVSqr;
    fResult += 0.180141f;
    fResult *= fVSqr;
    fResult -= 0.3302995f;
    fResult *= fVSqr;
    fResult += 0.999866f;
    fResult *= fValue;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastInvTan1 (Real fValue)
{
    Real fVSqr = fValue*fValue;
    Real fResult = 0.0028662257f;
    fResult *= fVSqr;
    fResult -= 0.0161657367f;
    fResult *= fVSqr;
    fResult += 0.0429096138f;
    fResult *= fVSqr;
    fResult -= 0.0752896400f;
    fResult *= fVSqr;
    fResult += 0.1065626393f;
    fResult *= fVSqr;
    fResult -= 0.1420889944f;
    fResult *= fVSqr;
    fResult += 0.1999355085f;
    fResult *= fVSqr;
    fResult -= 0.3333314528f;
    fResult *= fVSqr;
    fResult += 1.0f;
    fResult *= fValue;
    return fResult;
}
//----------------------------------------------------------------------


 Conclusion

Merci à Wild-Magic ;-)


 Sources de la même categorie

Source avec Zip OPERATION SUR LES MATRICES CARREES AVEC CLASSE GENERIQUE par chouhad
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus
[DEV-C++] CALCUL DE LA RACINE CARRÉE D'UN RÉEL par Jhep
PROGRAMME QUI CALCUL LE PPCM ET LE PGCD par AnoSantino
EVALUER UNE EXPRESSION MATHÉMATIQUE par begueradj

Commentaires et avis

Commentaire de Maegis le 14/07/2003 14:04:45

2 - 3 commentaires seraient les bienvenus

Commentaire de psy4meuh le 15/07/2003 07:17:28

en fait Wild Magic a dévelopé un prog d'analyse de courbe, et à partir des courbes de fonctions Cos, Sin, etc... on a des formules du genre :
x²+1589/255*x²+65887/155124*1-x²+258744/899... c'est de l'aproximation, (pas tres au point fô dire , mais une fois un peupris, on a des formules qui tiennent la route.
On retranscri ca en code C assez rapide et on obtient des fonction plus rapides que les standard, et qui donnent un resultat largement sufisent dans la plupart des cas...
Mais le code est compréhensible non?

Commentaire de Maegis le 16/07/2003 11:52:46

Il aurait pu quand même expliquer le fonctionement parce que la il balance les chiffres comme ça. J'avais pas pigé que c'était une aproximation  à partir des courbes

Commentaire de drpark le 18/12/2004 17:52:03

hello, j'ai fait un test de rapidité,
et c kifkif avec les fonctions standarts...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales