2011-04-05 69 views
4

我不擅長數學或幾何學,但我想繪製一些增加角度的線段。我想畫的東西就像你握住你的手並將你的手指分開一樣:從一個共同點開始並以相同的角度展開的線條。增加角度的繪製線

我已經試過這樣:

len = 300; 
angle = 10; 

for (i = 0; i <= 5; ++i) { 
    endPointX = 50 + len * Math.cos(angle); 
    endPointY = 50 + len * Math.tan(angle); 
    draw.Line(50, 50, endPointX, endPointY); 
    angle += 10; 
} 

然而,這是完全錯誤的,併產生這樣的

http://i.stack.imgur.com/taX40.png

但我想是這樣的(壞MSPAINT,不好意思):

http://i.stack.imgur.com/8xfpp.png

這是什麼數學?

+0

http://en.wikipedia.org/wiki/Radian – YXD 2011-04-05 23:45:36

+0

將sin()替換爲tan(),並將角度增加0.1。 – 2011-04-05 23:45:47

+0

也就是說,角度應該是弧度而不是度數。 360度= 2 * pi弧度。 2的因素是歷史錯誤之一。 – YXD 2011-04-05 23:47:13

回答

9

在你的問題中有兩個單獨的問題,我將覆蓋每個問題。


這裏是你的情況的ASCII圖片:

 
        B 
        + 
        /| 
       /| 
       /| 
      / | 
     len/ | y 
      / | 
      / | 
     /  | 
     / __| 
     /θ | | 
     +----------+ 
     A  x  C 

這是一個直角三角形。它有三面:

  • 圖中與90°角相對的對角線一側稱爲斜邊,其長度爲len。斜邊是你想要畫的東西。
  • 垂直面是與角度θ相反的一面,其長度爲y
  • 水平邊是與角θ相鄰的邊,其長度爲x

鑑於上述說明以下等式爲真:

cos(θ) = x/len 
sin(θ) = y/len 

這些方程的另一種說法:

  • 的角度的餘弦等於所述相鄰的長度側邊除以斜邊的長度。
  • 角度的正弦等於對邊的長度除以斜邊的長度。

當求解xy公式,你會得到:

x = len * cos(θ) 
y = len * sin(θ) 

所以,你要sin()cos(),不cos()tan()。如果點A是不在原點,則需要通過另外抵消xy,像這樣:

x = len * cos(θ) + 50 
y = len * sin(θ) + 50 

隨着xy的值,你可以找到點B座標上的三角形,從而能夠畫出你的線條。


而且,假設你在Java編程中,在Math類三角函數預計radians,不度的角度。許多提供三角函數的編程語言都是這樣的。

弧度度測量同樣的事情,但在度完全旋轉從0360°而弧度完整循環去從0

要將角度轉換爲弧度,請將角度乘以π/180。在Java中,常量πMath.PI提供。

例如,10度的角度等於10 * π/180π/18弧度。

+0

只是好奇心,你會如何與人物45º角線?我試着劃線,劃線和減號,但看起來很醜(¯-)。 – rraallvv 2017-11-15 14:50:35

0

首先,您需要cossin,而不是costan。其次,大多數數學庫以弧度而不是度數來執行三角函數。所以10確實是一個非常大的差異!從度數轉換爲弧度,乘以(pi/180)

0

你看起來不均勻的角度的原因是,每當你加10時,你實際上是圍繞着圓圈旋轉1.6倍。

數學函數期望角度以弧度爲單位,而不是度數。

360度= 2 * Math.PI弧度。

,而不是10,寫上 「2 * Math.PI/36.0」

此外,使用罪,而不是曬黑。

+0

Mathemagic。謝謝。 – Priam 2011-04-05 23:54:50

0

你不應該使用棕褐色,但罪惡。如果我沒有記錯,它應該是這樣的: Math.cos(angle/180); -Math.sin(angle/180); 對罪的負面影響很重要。