2011-11-24 3 views
1

저는 볼트 원 모양의 x, y 좌표를 계산하는 프로그램을 C로 계산하려고합니다. 나는 수학 부분 권리를 가지고 있지만 시작 각도를 나열하는 얻을 방법을 알아낼 수 없습니다와 마지막 대신 첫번째 좌표와도 여기에 지난 360 가지 않는 코드입니다 :일부 포인터가 필요합니다

#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    float x;  //x location 
    float y;  //y location 
    float h;  //# of holes 
    float d;  //diameter of bc 
    float a;  //starting angle 
    int n;   //hole count 

    printf("enter dia of circle\n"); 
    scanf("%f", &d); 
    printf("enter number of holes\n"); 
    scanf("%f", &h); 
    printf("enter starting angle, counter clockwise from 3:00\n"); 
    scanf("%f", &a); 

    float r = d/2; //radius 
    float k = 360/h; //degrees between holes 

    for (n = 0; n < h; n++) { 
     a = a + k; 

     x = r * (cos(a * M_PI/180)); 
     y = r * (sin(a * M_PI/180)); 

     printf("%.3f, %.3f, %.2f\n", x, y, a); 
    } 

    return 0; 
} 

나는 코드를 바로 잡기 위해 C에서 이것을하고 있는데, 아이폰 용으로 객관적인 C 코드를 넣을 것이다. 각 x에 대한 출력을 나열하는 가장 좋은 방법은 무엇일까? & y 좌표와 각도? 예를 들어 테이블 뷰를 사용합니까? 어떤 조언을 주셔서 감사합니다.

+4

http://xkcd.com/138/ –

+1

그냥 제안 사항 - 변수의 이름을 짓는 것이 좋습니다. 예를 들어, [float h; // holes of #]은 [float numberOfHoles;]로 작성되어 주석을 무효화하고 코드의 다른 영역을 더 읽기 쉽게 만듭니다. [for (int holeCount = 0; holeCount

+0

@Doug : 대부분 동의했지만 그 이름은 _huge_입니다. 'for (int h = 0; h sarnold

답변

1

좀 더 이런 일에 a = a + k을 교체하는 게 좋을 것 : 부동 소수점 숫자의

float base_a; 
printf("enter starting angle, counter clockwise from 3:00\n"); 
scanf("%f", &base_a); 

for (n = 0; n < h; n++) { 
    a = base_a + n*k; 

반복 또한 증가 오류로 이어집니다. 어쩌면 이것은 중요하지 않습니다 (결국 doubles가 아닌 float을 사용하고 있지만 이 double보다 빠르기 때문에 오류가 누적되기 때문에 더 많은 문제가 있음). 그러나 수정 사항은 다음과 같습니다. 쉽게 충분 : 카운트와의 차이를 곱하고이를 상수베이스에 추가하십시오. hfloatint 동안 n입니다 -

는 또한 n < h의 비교에 대해 조금 걱정입니다. 부동 소수점 루프 변수에 대해 보통 걱정하고 있지만, 나는 입니다.은 구멍 수에 사용되는 부동 소수점이 걱정됩니다. 그게 문제가 지정한 것입니까?

+0

내가 h를 int로 바 꾸었습니다. float 일 필요는 없었습니다. 그 덕분에 도움을받을 필요가있는 곳을 찾았습니다. 질문의 두 번째 부분에 대한 조언을 받았나요? – mmoore410

+0

죄송합니다. 귀하의 질문에 귀하를 도와 드릴만한 아이오와가 충분하지 않습니다. 다른 사람들이 당신에게 더 나은 대답을 줄 수 있기를 희망합니다. – sarnold

+0

그건 괜찮아. 알아낼거야. 학습 과정의 모든 부분. 다시 한번 감사드립니다. – mmoore410

관련 문제