比方說,我有一個(x,y)對於一條線的開始點總是一樣的,而一個(x,y)對於同一個終點的點線。該行也總是40px長。在程序開始時,線條始於垂直方向(讓它稱爲0度)。基於用戶輸入,我需要通過僅更改結束點(x,y)來重新繪製從原點開始的特定度數。深思在Java中以特定角度畫一條線
一些食物,如果你需要它:
我在一個發情試圖計算出這一點,並使其在Java中工作很。我可以根據圓弧段的弧長計算點的數學工作,但我不知道如何讓Java做到這一點。
我認爲基於三角形角度會更容易,因爲我總是會知道三角形的兩邊的長度(一邊是由40px長的線形成的,另一邊是由該線的起點形成的另一邊和JPanel的邊界)以及這兩條線形成的角度。儘管如此,我的大腦卻很難找出答案。任何幫助將非常感激。
UPDATE:
@casablanca讓我在正確的軌道上。我刷了我的trig函數,這是我如何使它工作。
首先,我沒有意識到90度是直線上升的,但是一旦我意識到我讓我的解決方案反映了這一事實。我從畫面底部的中心開始畫出我的線條。由於我的用戶給出的角度小於90度時,三角形的opposite
一側位於屏幕的右側,而當我的用戶給出的角度大於90度時,屏幕的左側是我的爲了說明這一點,我調整了公式,因此我有四種方法,一種用於屏幕左側的x
座標(當用戶給定的角度大於90度時),一個用於座標左側的y
(當用戶給定角度大於90度時),當用戶給定角度時,屏幕右側的相同物品小於90度。所有方法中的int length
是斜邊的長度。 再次感謝您的幫助@casablanca!
public double leftSideX(double angle, int length){
double x = frameWidth/2 - (length * Math.cos(Math.toRadians(90-(Math.toDegrees(angle)-90))));
return x;
}
public double leftSideY(double angle, int length){
double y = frameHeight - (length * Math.sin(Math.toRadians(90-(Math.toDegrees(angle)-90))));
return y;
}
public double rightSideX(double angle, int length){
double x = frameWidth/2 + (length * Math.cos(angle));
return x;
}
public double rightSideY(double angle, int length){
double y = frameHeight - (length * Math.sin(angle));
return y;
}
也可以考慮改變圖形上下文的變換,如下所示:http://stackoverflow.com/questions/3420651 – trashgod 2010-08-21 15:18:59
你可能要考慮這個封裝班級中的功能;例如的Vector2D。這樣你就可以用x和y座標或者長度和角度來構造一個Vector2D,並提供諸如getMagnitude(),getAngle(),getX(),getY(),rotateClockwise(double)等方法。 – Adamski 2010-08-22 21:22:48
喜歡,但我認爲這有點超出我現在的能力。我花了將近一整天的時間才弄明白這一點:) – ubiquibacon 2010-08-22 21:28:02