คำนวณเส้นโค้งไซน์ใน C
Aug 16 2020
ฉันต้องการรับค่าคาบที่เลื่อนระหว่าง 0 ถึงความสูงที่ระบุ (ในกรณีของฉันคือ 40) จากเส้นโค้งไซน์
แต่ฉันทำบางอย่างยุ่งเหยิงเพราะค่าของฉันไปทาง 79 แทนที่จะเป็น 40 ที่คาดไว้ฉันทำอะไรผิด?
นี่คือความพยายามของฉัน:
#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;
}
คำตอบ
2 chux-ReinstateMonica Aug 16 2020 at 03:34
ความละเอียดโดยตรงคือการแบ่งขนาดคลื่นด้วย 2 @Eric Postpischil
// int value = height + sin(degToRad(i / 2 + 1)) * height;
int value = height + sin(degToRad(i / 2 + 1)) * height)/2;
และใช้เลขทศนิยมในการi/2
หาร @bruno
ผมคาดว่าผลที่ยอมรับมากขึ้นโดยใช้การปัดเศษมากกว่าการตัด (สิ่งที่รหัสของ OP ไม่) int
ไปจากจุดลอยไป
int value = height + lround(sin(degToRad(i / 2 + 1)) * height)/2);
2 Hi-IloveSO Aug 16 2020 at 03:26
แอมพลิจูดของเส้นโค้งจะเป็นheight / 2
และไม่height
; เพียงแค่แทนที่
int value = height + sin(degToRad(i / 2 + 1)) * height;
ด้วย
int value = height / 2 + sin(degToRad(i / 2 + 1)) * height / 2;
วิธีที่ดีในการจำนั่นคือ sin x จะอยู่ในช่วง [-1, 1] เสมอ