2017-05-01 42 views
1

我正在嘗試編寫一個顯示向量的類。如果我創建一個矢量對象,一切都按預期工作。在我的示例代碼中,在draw()函數的幫助下繪製對象lin1創建第二個對象使類的功能不再工作

如果我現在創建第二個矢量對象,(不變)繪製函數不再做任何事情,即使對象本身沒有改變。反過來也是如此:第二個對象是唯一存在的對象,那麼它可以被繪製,但只有lin1不存在。

有誰知道我的錯誤在哪裏?

vector lin; 
vector lin2; 

void setup() 
{ 
    size(500,500); 
    background(255); 
    cenX = width/2; 
    cenY = height/2; 
    noLoop(); 
} 

void draw() 
{ 
    coordSys(); 
    lin = new vector(0,0,100,100); 
    lin2 = new vector(0,0,-200,-200); 
    lin.draw(); 
    lin2.draw(); 
    lin.getAll(); 
} 

class vector 
{ 
    float x1,y1,x2,y2; 
    float length; 
    float angle; 
    float gegenK, anK; 

    vector(float nx1, float ny1, float nx2, float ny2) 
    { 
    translate(cenX,cenY); 
    x1 = nx1; y1 = -ny1; x2 = nx2; y2 = -ny2; 
    strokeWeight(2); 
    // Gegenkathete 
    gegenK = ny2 - ny1; 
    // Ankathete 
    anK = x2 - x1; 
    // length and angle 
    length = sqrt(sq(anK) + sq(gegenK)); 
    angle = winkel(gegenK, anK); 
    } 

    void draw() 
    { 
    stroke(0); 
    line(x1,y1,x2,y2); 
    } 
} 
} 
+0

有沒有原因你不要調用'lin2.getAll()'? – Ishnark

+0

你可以向'stroke()'和'line()'顯示源代碼嗎? 'stroke(0)'做什麼? –

+0

這些是處理內部功能。線條繪製線條,筆觸設置線條的顏色。 – user7948346

回答

0

編寫代碼時請使用標準命名約定。具體而言,您的課程應爲Vector,大寫字母爲V.此外,請將您的代碼以編譯和運行的MCVE的形式發佈。

不管怎樣,在你的Vector()構造函數中的第一個電話是這樣的:

translate(cenX,cenY); 

該移動窗口的起源橫跨半個窗口。當你這樣做一次,這隻會讓你的繪圖調用相對於窗口的中心。但是當你這樣做兩次時,它會將原點移動到窗口的右下角,這樣所有圖形都會移出屏幕邊緣。

要解決您的問題,您需要移動此行,以便它只發生一次(可能在draw()函數的開頭),而不是每次繪製Vector。解決這個問題的另一種方法是使用pushMatrix()popMatrix()函數來避免窗口翻譯的堆疊。

+0

就是這樣!非常感謝! – user7948346

相關問題