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.
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'