सी में साइन वक्र की गणना करें
मैं एक आवधिक मूल्य प्राप्त करना चाहता हूं जो साइन वक्र से 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 @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);
वक्र का आयाम तब होगा 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] सीमा में हो।