2012-12-28 57 views
0

這真的讓我瘋狂,我知道我很傻。這條線爲什麼不是45度?正確使用processing.org trig功能

size(800, 600); 
    background (30); 
    stroke(255); 

    float r = 100; 
    float a= 20+ r * cos(radians(QUARTER_PI)) ; 
    float b= 20+ r * sin(radians(QUARTER_PI)) ; 
    line(20,20,a,b); 

我從一個更大的項目中簡化了這段代碼,如果我做了很多迭代,圓圈就會出現。我做了什麼來製作角度尺度?

回答

0

我會從調試代碼開始。該行不是45度,因爲值被傳遞給line()。通過打印ab的值,顯然該線正從座標(20,20)繪製到大致(119,21)。所以你正在告訴程序畫一條直線。

print(a + "\n"); // returns 119.99 
print(b);   // returns 21.37 

如果要繪製一個圓,爲什麼不使用ellipse()函數?


編輯:

與您的代碼的問題是要傳遞到radians()函數值QUARTER_PI,這已經是在弧度。因此,您的問題可能在以下任一方式來解決:

// Pass in an amount of radians directly. 
float r = 100; 
float a = 20 + r * cos(QUARTER_PI); 
float b = 20 + r * sin(QUARTER_PI); 
line(20,20,a,b); 

// Pass in degrees converted to radians. 
float r = 100; 
float a = 20 + r * cos(radians(45)); 
float b = 20 + r * sin(radians(45)); 
line(20,20,a,b); 
+0

應該是45度,因爲罪(π/ 4)和cos(π/ 4)是等於同樣的事情 - 但他們並沒有被計算爲平等。你能明白這是爲什麼嗎? – dnv

+0

這是因爲弧度(PI/4)不等於PI/4,但弧度(45)等於PI/4。 'radians()'函數必須得到一個度數值作爲它的參數。將弧度值傳遞給'radians()'函數並不是一個有意義的操作。 – gary

+0

啊我看到謝謝 - 我看到這些問題後,實際上已經添加了這個功能,但顯然這隻會讓事情變得更糟。我會試着看看我是否把更多的單位與我的大型項目混淆在一起,如果沒有病的話,發佈代碼 – dnv