我需要繪製填充正方形,該正方形必須用中心線繪製。 我們不能使用java形狀Java:使用線條從中心點繪製填充平方
我們有一箇中心點,並且筆必須在每個角度中從中心到方形邊緣繪製一條線。
這裏的問題是數學,我可以用什麼來計算繪製距離。因爲如果我總是使用相同的距離,它會畫一個圓圈。
感謝
我需要繪製填充正方形,該正方形必須用中心線繪製。 我們不能使用java形狀Java:使用線條從中心點繪製填充平方
我們有一箇中心點,並且筆必須在每個角度中從中心到方形邊緣繪製一條線。
這裏的問題是數學,我可以用什麼來計算繪製距離。因爲如果我總是使用相同的距離,它會畫一個圓圈。
感謝
繪製正方形時,您可以考慮以任意角度繪製的長度,因爲它是直角三角形的仰角長度。你可以很容易地用三角比解決這個問題。棘手的部分是三角形的底部移動。
以一行在下面的圖的左半部分示出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));
}
備註:此代碼以角度爲度數,僅適用於正角度。另外,如果你想讓這些線條在傳輸線周圍以均勻的增量與廣場相遇,那麼你需要提出一個解決方案,它使用畢達哥拉斯定理計算出低音揚聲器的長度,然後用三角函數計算出角度畫在。
希望有所幫助。
它解決了我的問題! :D 感謝您的解釋,非常有用:) –
我會說這樣的事情
for(int i = sideLength * -1; i < sideLength; i++) {
for(int j = sideLength * -1; j < sideLength; j++) {
graphics.drawLine(centerX + i, centerY + j);
}
}
這樣的話,它會畫一條線,在廣場的每一個點,你試圖讓。我不確定這是否是你想要的,但它會起作用。
顯示您目前使用什麼,人們可以更快地幫助您。線應該從中心到邊緣。所有你需要改變的是角度。 – mercutio