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/2
bö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 / 2
ve 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ı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
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'