2011-11-24 103 views
1

我想弄清楚c中的程序來計算螺栓圈模式中的x,y座標。我已經得到了數學部分正確的,但不能弄清楚如何得到它列出起始角度和第一座標的最後,而不是和度不晃過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; 
} 

我這樣做是爲了得到正確的代碼,然後我將它放在iPhone的目標c中,列出每個x座標和角度的輸出的最佳方法是什麼?例如,我會使用表格視圖嗎?感謝您的任何建議。

+4

http://xkcd.com/138/ –

+1

只是一個建議 - 嘗試命名你的變量有意義的東西。例如,[float h; [#hole 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; 

反覆此外浮點數導致增加的錯誤。也許這並不重要(畢竟,你只使用float s而不是double s - 但是由於float s比double s累積更快,所以它是一個更緊迫的問題),但是解決方法是足夠簡單:將差異與計數相乘並將其添加到恆定基數。

我也有點擔心比較n < h - ninthfloat。雖然我通常擔心浮點循環變量,但我更願意用於浮點數的浮點數。這就是問題所在?

+0

我把h改爲int,並不需要是float。這讓我得到了我需要感謝的幫助。在問題的第二部分對我有什麼建議? – mmoore410

+0

對不起,我不知道有足夠的iOS來幫助你解決你的問題 - 我建議不要選擇我的答案,希望別人能給你一個更好的答案。 – sarnold

+0

沒關係,我會弄明白的。學習過程的所有部分。再次感謝。 – mmoore410