座標の誤差について
次のプログラムのように座標を指定すると、思ったように結果が得られないことがあります。
線太さは1
塗りスタイルは「透明」
線色は黒色
0,0から100,100へ四角
0,0から100,100へ円
線色は緑色
0,0から100,100へ線
線色は赤色
0,100から100,100へ線
100,0から100,100へ線
線色は黒色
100,250から0,150へ四角
100,250から0,150へ円
線色は緑色
100,250から0,150へ線
線色は赤色
100,150から0,150へ線
0,250から0,150へ線
上の図では、四角形の右辺と下辺を赤い線にするつもりでしたが、赤い線が四角に接しています。
同じ座標を指定したのに。。。
下の図では、四角形の左辺と上辺を赤い線にするつもりでしたが、少しはみ出しています。しかも左上角は赤くなっていません。
どうしてこうなるのでしょうか?
調べたところ、四角形と円を描く際に、始点(左上)x1,y1と終点(右下)x2,y2を指定するのですが、このx2,y2の座標値がそれぞれ(-1)されていることが分かりました。
下の図では始点を右下、終点を左下にしていますが、この場合右下の座標値x1,y1が(-1)されています。
また、直線を描く際にも、終点のx2,y2の座標値がそれぞれ(-1)されていました。上の図をよく見ると、四角の右下角で赤い直線がつながっていません。
さらに、下の図では、直線の場合は終点を左上にすると(+1)されます。
まとめると、x1,y1からx2,y2へ指定する場合、
描画 |
左→右 |
左←右 |
上↓下 |
上↑下 |
四角 |
x2-1 |
x1-1 |
y2-1 |
y1-1 |
円 |
x2-1 |
x1-1 |
y2-1 |
y1-1 |
線 |
x2-1 |
x2+1 |
y2-1 |
y2+1 |
なんだか、手前で寸止めされているようですな。
クジラ飛行机さんの説明
さて、質問の件なのですが、これなんですが、
Windows APIの特性です。
基本的に、なでしこは、Delphiの命令をそのまま
使っているのですが、描画関連においては、
Delphiのライブラリは、Windows APIを呼んでいるだけです。
私も、時々、オヤッと思うことがあるのですが、
矩形(+円)を描画するときは、-1されるようです。
昔、直そうかと思ったこともあるのですが、Delphiのライブラリも
そのままなので、いろいろと面倒なことがあるかもと思って、
そのままになっています。
。。。だそうです。
回避策
0,0から101,101へ四角
のように、ひとつひとつの動作を確認しながら、自分で対処するしかないようです。
最終更新:2009年10月23日 16:09