Hitung kurva sinus di C
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
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/2
divisi. @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);
Amplitudo kurva kemudian akan menjadi height / 2
dan 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].