1

処理中 (2) 現在、UML 風のスタイルで Java クラス図を作成しています。クラス、インターフェイスなどは、処理のrect()メソッドを使用して作成された長方形として表されます。display()矩形を描画するメソッドを使用して、表示される矩形ごとにクラスが作成され、矩形に関する情報が格納されます。

このダイアグラムのズームインとズームアウトを実装するために (非常に大きなプロジェクトまたは非常に小さなプロジェクトを容易にするため)、scaleマウスホイールをスクロールインおよびスクロールアウトするたびに変数を変更するコードを追加しました。scale()コードは、クラスの四角形などが描画されるたびにProcessing のメソッドを使用します。

また、これらの長方形のいずれかにマウスが置かれたことを検出しようとしています。これは現在、長方形を表すクラス内の次のコードで行われます。

//Checks to see if a mouse X and Y (posX and posY) position is inside the rectangle.        
public boolean positionCollides(int posX, int posY) {
        boolean xCollides = false, yCollides = false;

        if((centreX + (width/2) >= posX) && (centreX - (width/2) <= posX)){
            xCollides = true;
        }

        if((centreY + (height/2) >= posY) && (centreY - (height/2) <= posY)){
        yCollides = true;
        }

        if(xCollides && yCollides){
            return true;
        }
        else{
            return false;
        }

    }

wheremouseXmouseYはそのメソッドに供給されます。このコードのcentreXcentreYは、長方形が最初に作成されたときの長方形の中心の座標を含む (ed) 変数です。

ただし、ズームインしてスケーリングが長方形のdisplay()メソッドに適用されると、マウスオーバーが中断します。おそらく、物がわずかに異なる X 座標と Y 座標で表示され、古いものをまだチェックしているためです。

上記のpositionCollides方法を変更して、スケーリングの結果を処理できるようにする方法はありますか? どうすればこれをソートできますか?

positionCollidesこれを、display メソッドの呼び出しの後に呼び出すコードを入れてscale()(mouseX と mouseY の値もスケーリングするように)、mouseX と mouseY にスケールを掛けて (つまり、0.9、 1.1) それらを正しい値にしようとします。

おそらく、オブジェクトの centerX と centerY を動的に変更する方法はありますか?

私の文章の壁を読んでくれてありがとう。

tl;dr - マウス ポインタが Processing で拡大縮小された形状/長方形の内部にあるかどうかを検出するにはどうすればよいですか?

4

1 に答える 1

2

ここで、これを試してください:

(処理 1.5 でテスト済み)

int x, y, sz;
float factor = 0.87;//any value here
float transx = 50;//any value here
float transy = 25;//any value here
void setup()
{
  size(400, 400);
  x=100;
  y=100;
  sz=50;
}


void draw()
{

  noFill();
  //draw at original positon, no fill
  rect(x, y, sz, sz);
  scale(factor);
  translate(transx, transy);
  fill(255);
  //draw after scalling and positioning filled this is tested for insidness
  rect(x, y, sz, sz);
  if ( mouseX / factor - transx > x    && 
       mouseX / factor - transx < x+sz && 
       mouseY / factor - transy > y    && 
       mouseY / factor - transy < y+sz)
  {
    println("i'm inside!!!");
  }
  else
  {
    println("i'm outside");
  }

}

于 2012-11-12T13:14:15.380 に答える