0

長方形を描く機能を備えた小さなペイントアプリケーションを作成しています。ただし、南西象限以外では長方形を描くことはできません。私はこれを使用して長方形を描いています:

graphics.DrawRectangle(
    mainPen, 
    prevPoint.X, 
    prevPoint.Y, 
    e.Location.X - prevPoint.X, 
    e.Location.Y - prevPoint.Y);

私は何か小さなものが欠けているだけですか?または、原点を設定する場所を見つけるために計算を行う必要がありますか?この説明がわかりにくい場合は、画像を提供できます。

4

3 に答える 3

1

X小さいとYRectangle's左上のポイントに設定し、ポイント間の絶対差をとに設定する必要がありwidthますheight。これを使用できます:

int left = prevPoint.X < e.Location.X ? prevPoint.X : e.Location.X;
int top = prevPoint.Y < e.Location.Y ? prevPoint.Y : e.Location.Y;
graphics.DrawRectangle(mainPen, left, top, Math.Abs(e.Location.X - prevPoint.X), Math.Abs(e.Location.Y - prevPoint.Y));
于 2013-03-19T22:26:50.620 に答える
1

の計算でe.Location.X - prevPoint.Xは、開始点 (たとえば 200) が終了点 (たとえば 400) よりも小さいため、「東」に行くと負の反発力が得られます。したがって、幅と高さのメソッドに負の整数を渡しています。

仕様によると: http://msdn.microsoft.com/en-us/library/x6hb4eba.aspx常に四角形の左上隅を定義してから、(正の) 幅と高さを定義します。

これを試して:

graphics.DrawRectangle(
    mainPen, 
    Math.Min(prevPoint.X, e.Location.X), 
    Math.Min(prevPoint.Y, e.Location.Y), 
    Math.Abs(e.Location.X - prevPoint.X), 
    Math.Abs(e.Location.Y - prevPoint.Y)
);
于 2013-03-19T22:27:23.727 に答える
1

メソッドはパラメーターを (左上 x、左上 y、幅、高さ) として想定しているため、長方形の左上の点を計算する必要があると思います。それを最初の 2 つのパラメーターとして使用し、2 つのポイントを減算して絶対値を取ることで、幅/高さを計算します。

コードは次のようになります。

int leftX, leftY, width, height;
leftX = prevPoint.X < e.Location.X ? prevPoint.X : e.Location.X;
leftY = prevPoint.Y < e.Location.Y ? prevPoint.Y : e.Location.Y;
width = Math.Abs(prevPoint.X - e.Location.X);
height = Math.Abs(prevPoint.Y - e.Location.Y);
graphics.DrawRectangle(mainPen, leftX, leftY, width, height);
于 2013-03-19T22:27:47.900 に答える