C'de sinüs eğrisini hesapla
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
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
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.
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
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ı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'