2017-02-01 10 views
1

마우스를 끌어서 한 곳에서 그려보고 싶습니다. 커서 자체 아래 하나를 포함하여 캔버스 중심을 중심으로 3 곳에서 선을 그립니다. 하나의 도면 오른쪽 마우스 커서 아래에 2, 다른 하나는 이에 따라 회전되도록이 코드를 수정할 수있는 방법"Processing"에서 마우스로 그림을 그려야하지 않습니다.

void setup(){ 
    size(300, 300); } 

void draw() { 
    translate(width/2, height/2); 
    if(mousePressed) 
    for(int i=0; i<3; i++){ 
     line(width/2 -mouseX, height/2 -mouseY, 
      width/2 -pmouseX, height/2 -pmouseY); 
     rotate(2*PI/3); }} 

: 나는 3 선을 그릴하지만 그들 중 누구도 마우스 커서 아래에없는 않습니다 다음 코드를 사용하고 ?

+0

사람들이 대답하기 만하면 질문을 삭제하는 것이 약간 무례합니다. 나중에 사람들이 당신을 도울 가능성을 줄입니다. : ( –

+0

짧은 말로 충분했을 멍청한 실수 였어. 내가 삭제를 취소 할 수 있었는지 알기 위해 노력했지만 더 이상 쓸모가 없다. 나는 많은 다른 게시물도 매우 유용하다는 것을 알았다. – rnso

답변

0

translate()rotate() 전화와 관련된 점에 대해 생각해 봐야합니다.

먼저 원점이 왼쪽 위 모퉁이가 아닌 화면 중앙에 있도록 변환합니다. 따라서 모든 점은 왼쪽 위 모퉁이가 아닌 중심을 기준으로해야합니다.

이를 디버깅하려면, 내가 for 루프를 치우는에 의해 시작하고 간단하게 단일 지점, 또는 한 줄 그리는 것 :

void setup() { 
    size(300, 300); 
} 

void draw() { 
    translate(width/2, height/2); 
    if (mousePressed) { 
    line(width/2 -mouseX, height/2 -mouseY, 
     width/2 -pmouseX, height/2 -pmouseY); 
    } 
} 

당신이이 꺼져있는 것을 볼 수 있습니다 의미하여 라인의 위치를 ​​계산하는 로직이 잘못되었습니다. 패턴을 알아 내기 위해 이걸 가지고 놀 수 있고 몇 가지 예를 들어 생각해 볼 수 있습니다.

중심점은 150,150입니다. 따라서 마우스가 160,160 인 경우 어떤 지점을 그려야합니까? 150,150과 관련이 있으므로 160,16010,10이됩니다.

다른 말로하면 마우스에서 중심점을 빼서 점을 그릴 위치를 파악할 수 있습니다.

그러나 코드는 뒤로부터 가운데에서 마우스를 뺍니다.

앞으로도 비슷한 문제가 발생한다면 예제를 생각해보고 그들이 어디로 가야 하는지를 생각해 보는 것이 좋습니다. 그래프 용지는 이런 물건을 가진 가장 친한 친구입니다.

참고 : 내 대답은 your other question으로 코드를 작성 했으므로 그 점이 좋지 않습니다. 주문이 잘못되었지만 다른 질문에서 4 번 번역했기 때문에 문제가되지 않았습니다 (마우스 커서가 어쨌든 덮어 버렸습니다).