คำนวณเส้นโค้งไซน์ใน 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] เสมอ