Hitung kurva sinus di C

Aug 16 2020

Saya ingin mendapatkan nilai periodik yang bergerak antara 0 dan ketinggian yang ditentukan (dalam kasus saya, 40) dari kurva sinus.

Tetapi saya mengacaukan sesuatu, karena nilai saya mencapai 79, bukan 40 yang diharapkan. Kesalahan apa yang saya lakukan?

Ini adalah usaha saya:

#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;
    }

Jawaban

2 chux-ReinstateMonica Aug 16 2020 at 03:34

Resolusi langsung adalah membagi besaran gelombang dengan 2 @Eric Postpischil

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

dan menggunakan matematika floating point di i/2divisi. @bayu_joo


Saya mengharapkan hasil yang lebih dapat diterima menggunakan pembulatan daripada pemotongan (apa yang dilakukan kode OP) dari floating point ke int.

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

Amplitudo kurva kemudian akan menjadi height / 2dan tidak height; cukup ganti

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

dengan

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

Cara yang baik untuk mengingatnya adalah bahwa sin x selalu dalam kisaran [-1, 1].