C'de sinüs eğrisini hesapla

Aug 16 2020

Sinüs eğrisinden 0 ile belirli bir yükseklik (benim durumumda 40) arasında hareket eden periyodik bir değer almak istiyorum.

Ama bir şeyi karıştırıyorum, çünkü değerim beklenen 40'ın yerine 79'a çıkıyor. Neyi yanlış yapıyorum?

Bu benim girişimim:

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

Yanıtlar

2 chux-ReinstateMonica Aug 16 2020 at 03:34

Doğrudan bir çözüm, dalga büyüklüğünü 2 @Eric Postpischil'e bölmektir.

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

ve i/2bölmede kayan nokta matematiğini kullanın . @bruno


Kayan noktadan int.

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

Eğrinin genliği o zaman olur height / 2ve olmaz height; basitçe değiştir

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

ile

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

Bunu hatırlamanın iyi bir yolu, sin x'in her zaman [-1, 1] aralığında olmasıdır.