2017-05-01 4 views
1

벡터를 표시하는 클래스를 작성하려고합니다. 하나의 벡터 객체를 만들면 모든 것이 의도 한대로 작동합니다. 예제 코드에서 객체 lin1draw() 함수의 도움으로 그려집니다.두 번째 객체를 만들면 클래스의 함수가 더 이상 작동하지 않습니다.

이제는 두 번째 벡터 객체를 만들면 객체 자체는 변경되지 않더라도 (변경되지 않은) draw 함수가 더 이상 아무 것도하지 않습니다. 그것은 다른 방법으로 주위에 동일합니다 : 두 번째 객체가 유일하게 존재하고 그 다음 그려 질 수 있지만 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

코드를 작성할 때 표준 명명 규칙을 사용하십시오. 구체적으로, 클래스는 대문자 V를 사용하는 Vector이어야합니다. 또한 컴파일하고 실행되는 MCVE 형태로 코드를 게시하십시오.

어쨌든, 당신의 Vector() 생성자의 첫 번째 호출은 이것이다 :

translate(cenX,cenY); 

이 반쯤 창문을 통해 윈도우의 원점을 이동합니다. 이 작업을 한 번 수행하면 드로잉 호출이 창 중앙을 기준으로 간단하게 수행됩니다. 그러나이 작업을 두 번 수행하면 원점이 창의 오른쪽 하단으로 이동하므로 모든 도면이 화면 가장자리에서 벗어납니다.

문제를 해결하려면 Vector을 그리는 대신 한 번 (아마도 draw() 함수의 시작 부분에서)이 행을 이동해야합니다. 이것에 접근하는 또 다른 방법은 윈도우 번역 스태킹을 피하기 위해 pushMatrix()popMatrix() 함수를 사용하는 것입니다.

+0

그게 다야! 고마워요! – user7948346