C에서 사인 곡선 계산
사인 곡선에서 0과 지정된 높이 (제 경우에는 40) 사이를 이동하는 주기적 값을 얻고 싶습니다.
하지만 내 가치가 예상되는 40 대가 아닌 79 점까지 올라 가기 때문에 뭔가를 엉망으로 만들고 있습니다. 내가 뭘 잘못하고 있는가?
이것은 내 시도입니다.
#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
직접적인 해상도는 파동 크기를 2 @Eric Postpischil로 나누는 것입니다.
// int value = height + sin(degToRad(i / 2 + 1)) * height;
int value = height + sin(degToRad(i / 2 + 1)) * height)/2;
i/2
나눗셈 에서 부동 소수점 수학을 사용합니다 . @브루노
나는 잘림 (OP의 코드가하는 것)이 아닌 반올림을 사용하여 부동 소수점에서 int
.
int value = height + lround(sin(degToRad(i / 2 + 1)) * height)/2);
2 Hi-IloveSO
곡선의 진폭은 다음 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] 범위에 있다는 것입니다.