بتـــــاريخ : 2/22/2011 7:24:28 PM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 2400 0


    الدوال المثلثيه كيف يتم برمجتها

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : محمد علاء الدين | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :
    الدوال المثلثيه برمجة

    السلام عليكم و رحمة الله و بركاته

    فكرت كثيرا عن كيفية تضمين الدوال المثليه مثل sin , cos and tan و ايضا دالة الجذر التربيعى و الأسس داخل الـ c++

    بالنسبه للدوال المثلثيه و خصوصا الداله sine
    بحثت على الإنترنت فوجدت من يقول انه بإستخدام الــ lookup table او بإستخدام for-loop

    و من الأكواد التى وجدتها للداله sin التالى

    double mysin1(double x)
    {
    double numerator = x;
    double denominator = 1.0;
    double sign = 1.0;
    double sin = 0;

     // terms below define the number of terms you want
     int terms=10;

     for ( int i = 1; i <= terms; i++ )
     {
      sin += numerator / denominator * sign;
      numerator *= x * x;
      denominator *= i*2 * (i*2+1);
      sign *= -1;
     }
    return sin;
    }


    عندما جربته لم يعطى نتائج سليمه مع كل الزاويا، لذا حاولت تضمينه بشكل اخر و هو كتابة داله للداله cos و من خلالها استدعاء الدالة sin بكود اخر و هو التالى

    ملحوظه : (لمن لا يعرف) الدوال المثلثيه يمكن تضمينها كالتالى
    sin (theta) = (PI / 2) - theta
    cos(theta) = (PI / 2) - theta


    const double PI = 3.14159265358979323846;

    double mycos1(double x)
    {
            double numerator = 1.0;
            double denominator = 1.0;
            double sign = 1.0;
            double cos = 0;

            // terms below define the number of terms you want
            int terms = 10;
           
            for ( int i = 1; i <= terms; i++ )
            {
                    cos += numerator / denominator * sign;
                    sign *= -1;
                    numerator *= x * x;
                    denominator *= (i*2-1) * i*2;
            }
           
            return cos;
    }

    double mysin2(double x)
    {
            return mycos1((PI/2) - x);
    }


    بالنسبه للداله mysin2 اعطت نتائج سليمه اما الداله mycos فليست كل نتائجها سليمه، لذا قمت بتضمينها مره اخرى بإستخدام المعاداله الذكوره بالأعلى كالتالى
    double mycos2(double x)
    {
            return mysin1((PI/2) - x);
    }


    هذه المره اعطت نتائج سليمه، ما ادهشنى هو ان كل من الدالتين mysin1 و mycos1 ليست كل نتائجهم سليمه فى حين ان الدالتين mysin2 و mycos2 يعطوا نتائج سليمه.

    طبعا لا اعتقد ان الدالتين sinf و cosf الموجودين فى math.h تم تضمينهم على مرحلتين لذا فسؤالى الأول هو : ما هو الكود المستخدم للدالتين sin , cos?

    سؤالى الثانى متعلق بدالة الأس و الجذر التربيعى

    اما بالنسبه لدالة الأس فهى سهله
    double Power(int pwr,double number)
    {
            double sum=1;

            for(int i=1; i<=pwr; i++)
                    sum *= number;
    }


    اما بالنسبه لدالة الجذر التربيعى فقد وجدت بعض الطرق اليدويه للحصول على الجذر التربيعى و لكنى لم استطع تطبيق اى منها. لذا فسؤالى الثانى هو: ما هو الكود المستخدم لدالة الجذر التربيعى؟

    و الله ولى التوفيق

    كلمات مفتاحية  :
    الدوال المثلثيه برمجة

    تعليقات الزوار ()