सी में साइन वक्र की गणना करें

Aug 16 2020

मैं एक आवधिक मूल्य प्राप्त करना चाहता हूं जो साइन वक्र से 0 और एक निर्दिष्ट ऊंचाई (मेरे मामले में 40 वर्ष) के बीच चलता है।

लेकिन मैं कुछ गड़बड़ कर रहा हूं, क्योंकि मेरा मूल्य अपेक्षित 40 के बजाय 79 हो गया है। मैं क्या गलत कर रहा हूं?

यह मेरा प्रयास है:

#include <math.h>

    #define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0)
    
    int main()
    {  
        int height = 40;
        int i = 0;
        while (1) {
    
            int value = height + sin(degToRad(i / 2 + 1)) * height;
            printf("val = %i\n", value);
            i++;
        }
        return 0;
    }

जवाब

2 chux-ReinstateMonica Aug 16 2020 at 03:34

एक सीधा संकल्प तरंग परिमाण को 2 @Eric Postpischil द्वारा विभाजित करना है

// int value = height + sin(degToRad(i / 2 + 1)) * height; 
int value = height + sin(degToRad(i / 2 + 1)) * height)/2;

और i/2डिवीजन में फ्लोटिंग पॉइंट मैथ का उपयोग करें । @bruno


मैं ट्रंकेशन (ओपी कोड क्या करता है) के बजाय फ़्लोटिंग पॉइंट से चलकर अधिक स्वीकार्य परिणाम की उम्मीद करता हूं int

int value = height + lround(sin(degToRad(i / 2 + 1)) * height)/2);
2 Hi-IloveSO Aug 16 2020 at 03:26

वक्र का आयाम तब होगा height / 2और नहीं height; बस प्रतिस्थापित करें

int value = height + sin(degToRad(i / 2 + 1)) * height;

साथ में

int value = height / 2 + sin(degToRad(i / 2 + 1)) * height / 2;

यह याद रखने का एक अच्छा तरीका है कि पाप x हमेशा [-1, 1] सीमा में हो।