2012-11-14 92 views
1

我需要繪製填充正方形,該正方形必須用中心線繪製。 我們不能使用java形狀Java:使用線條從中心點繪製填充平方

我們有一箇中心點,並且筆必須在每個角度中從中心到方形邊緣繪製一條線。

這裏的問題是數學,我可以用什麼來計算繪製距離。因爲如果我總是使用相同的距離,它會畫一個圓圈。

感謝

+0

顯示您目前使用什麼,人們可以更快地幫助您。線應該從中心到邊緣。所有你需要改變的是角度。 – mercutio

回答

1

繪製正方形時,您可以考慮以任意角度繪製的長度,因爲它是直角三角形的仰角長度。你可以很容易地用三角比解決這個問題。棘手的部分是三角形的底部移動。

以一行在下面的圖的左半部分示出45度的例子:

你需要制定出紅線脯氨酸(Hyp)的長度。您可以使用 三角函數來計算hyp的長度,其基於其角度爲 adj和 adj的長度。 adj的邊長是 平方的高度的一半。

的公式是:

COS(角度)= ADJ/HYP

重排:

HYP = ADJ /餘弦(角度)

的代碼看起來是這樣的這個:

public static double calculateLengthToPaint(double angle, double heightOfSquare){ 
     return (heightOfSquare/2.0)/Math.cos(Math.toRadians(angle)); 
} 

不幸的是,這並不是所有的。這適用於第一個45度,但是當角度> 45度時,三角形的相鄰邊改變位置(如下圖右半部分所示)。它不斷翻轉每45度。

要處理這種翻轉,您需要使用傳入方法的角度(12點鐘位置的方形周圍的角度)來計算出我們所想象的三角形的角度。我修改了上面的方法來添加邏輯來計算出正確的角度。

public static double calculateLengthToPaint(double angle, double heightOfSquare){ 
    double flippy = angle % 90; 
    if (flippy > 45.0){ 
     flippy -= 90; 
     flippy = Math.abs(flippy); 
    } 
     return (heightOfSquare/2.0)/Math.cos(Math.toRadians(flippy)); 
} 

備註:此代碼以角度爲度數,僅適用於正角度。另外,如果你想讓這些線條在傳輸線周圍以均勻的增量與廣場相遇,那麼你需要提出一個解決方案,它使用畢達哥拉斯定理計算出低音揚聲器的長度,然後用三角函數計算出角度畫在。

希望有所幫助。

Showing the triangle flipping over it's hypoteneuse at 45 degrees.

+0

它解決了我的問題! :D 感謝您的解釋,非常有用:) –

0

我會說這樣的事情

for(int i = sideLength * -1; i < sideLength; i++) { 
for(int j = sideLength * -1; j < sideLength; j++) { 
    graphics.drawLine(centerX + i, centerY + j); 
} 
} 

這樣的話,它會畫一條線,在廣場的每一個點,你試圖讓。我不確定這是否是你想要的,但它會起作用。