1

次の問題で立ち往生しています。私は長方形(50x40ピクセル、位置:x1、y1)と円(半径30、位置x2、y2)を持っています。今、それらの間に矢印を描きたい

 void drawArrow(Graphics g1, int x1, int y1, int x2, int y2,) {
//x1 and y1 are coordinates of circle or rectangle
//x2 and y2 are coordinates of circle or rectangle, to this point is directed the arrow 
Graphics2D g = (Graphics2D) g1.create();
double dx=x2-x1;
double dy=y2-y1;
double angle = Math.atan2(dy, dx);
int len = (int) Math.sqrt(dx*dx + dy*dy);
AffineTransform at = AffineTransform.getTranslateInstance(x1, y1);
at.concatenate(AffineTransform.getRotateInstance(angle));
g.transform(at);
g.drawLine(0,0,len,0);
g.fillPolygon(new int[] {len, len-ARR_SIZE, len-ARR_SIZE, len},
new int[] {0, -ARR_SIZE, ARR_SIZE, 0}, 4);
}

このコードは明らかに、長方形と円の特定のポイントのみを接続します (この写真では、中央のポイントを接続しましたhttp://imageshack.us/photo/my-images/341/arrk.jpg/ )。このようなstgを達成する方法はありますか? (http://imageshack.us/photo/my-images/833/arr2u.jpg/ ) ... 長さを短くして新しい座標を計算するというのが私の考えでしたが、少し苦労しています。

// この関数を次のように呼び出します。

drawArrow(g,temp.x+radius/2,temp.y+radius/2,temp2.x+width/2,temp2.y+height/2);
4

1 に答える 1

1

最も簡単な方法は、クリッピングを設定することです。クリッピングに円と四角形を追加すると、クリッピングには描画されません。

ただし、問題を解決したり、矢印を描いたりすることはありません。この問題を解決するには、Shape.getBounds() を使用し、長方形の境界を計算してから、円に対する角度を計算し、三角法を使用して長方形の適切な場所を見つける必要があります。

于 2012-05-02T19:41:16.853 に答える