2017-02-01 8 views
1

マウスをドラッグして1つの場所に描画し、キャンバスの中心の周りに3つの線を描きたいと思います。つの図面は、右マウスカーソルの下にあり、他の2がそれに応じて回転されるように、私はこのコードを修正するにはどうすればよい「処理中」のマウスの下に描画しない

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回翻訳しているので(マウスカーソルがとにかく覆われてしまったので)あなたの他の質問には関係ありませんでした。

関連する問題