2014-02-22 63 views
0

我有點卡在試圖旋轉三角形圖形。使用線條集合旋轉三角形

所以我想旋轉由線組成的整個三角形。我有兩個班級,一個Line班級創建一個單行。還有一個三角形類,它通過組合所有的線來創建所有的三角形。首先,下面是我的Line類,它實現了一個名爲Curve的接口。曲線包含繪製,旋轉,平移等的定義。請注意,它只爲我的問題添加了相關功能。所以在我的旋轉功能中,問題行(X2,Y2)的終點被旋轉。我不知道如果我在三角類還實現了曲線類,我所有的行添加到我的全球ArrayList和旋轉,所有的人都在我的旋轉功能的公式是正確實現

public class Line implements Curve { 

    double x1Point; 
    double y1Point; 
    double x2Point; 
    double y2Point; 

    public Line(double x1, double y1, double x2, double y2){ 
     this.x1Point = x1; 
     this.y1Point = y1; 
     this.x2Point = x2; 
     this.y2Point = y2; 
    } 
    public void rotate(double degrees) { 
     x2Point = ((double)(x1Point * Math.cos(degrees * (Math.PI/180)))) - ((double)(y1Point * Math.sin(degrees * (Math.PI/180)))); 
     y2Point = ((double)(x1Point * Math.cos(degrees * (Math.PI/180)))) + ((double)(y1Point * Math.sin(degrees * (Math.PI/180)))); 
    } 

然後。請注意曲線在屏幕上正確繪製。我沒有添加繪製方法,因爲它與我的問題無關

public class Triangle implements Curve { 

    ArrayList<Curve> list = new ArrayList<Curve>(); 

    public void add(Line line){ 
     list.add(line); 
    } 

    public void rotate(double degrees) { 
     for(Curve c: list){ 
      c.rotate(degrees); 
     } 
    } 

因此,我對三角形的旋轉不正確。我不確定問題出在哪裏。它可以在旋轉個別線的公式中,但我不確定。希望有人能提供有價值的反饋!

謝謝!

回答

0

我猜你是想繞其中心的三角形(默認的旋轉是圍繞起源(0, 0)應用),所以你需要轉換到原點,然後再應用旋轉,最後轉換回原來的位置。

這是一些代碼,所以你明白了。假設你有點(三角形的頂點)p1center_triangle是三角形的中心。

//TRANSLATE TO ORIGIN 
double x1 = p1.getX() - center_triangle.x; 
double y1 = p1.getY() - center_triangle.y; 

//APPLY ROTATION 
x1 = x1 * Math.cos(angle) - y1 * Math.sin(angle)); 
y1 = x1 * Math.sin(angle) + y1 * Math.cos(angle)); 

//TRANSLATE BACK 
p1.setLocation(x1 + center.x, y1 + center.y); 

您必須對三角形的每個點執行此操作。

注:

使用Math.toRadians(degrees)代替degrees * (Math.PI/180)

+0

我不應該將每條線翻譯成原點嗎?所以這將是理想的更改我的線類內的旋轉功能,以翻譯成原點,旋轉,然後翻譯回來,但我不知道三角形的中心。 – Htlcs

+0

在「三角形」課上做這個。 – Christian