• ベストアンサー

Windows APIの線などの描画について

RectangleやLineTo関数を使ってて気づいたのですが 線の終点が指定した座標の一歩手前になっているようです 気になってネットで検索したら、終点の座標を指定すると説明しているものがありました。 私の使っている本でもそうなっています。 これはPCの問題なのでしょうか? それとも正確には終点の一歩手前の座標を指定するものなのでしょうか? 後者だとするとなぜそうしてあるのか気になります。 試しに同じ座標から同じ座標に線を引こうとしたら何も表示されませんでした。 私の感覚では点が表示されるのが期待されるのですが・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • tunamelt
  • ベストアンサー率75% (9/12)
回答No.1

LineTo 等で描画する場合、座標の指定には終点の座標を指定するのですが、終点の座標自体は描画に含まれません。 http://msdn.microsoft.com/ja-jp/library/cc410428.aspx PCの問題ではなく仕様となっていますので、どの環境でも同じ結果になります。 なぜこういった仕様にしたのかの理由は分かりませんが、座標ではなく幅として考えるとスッキリするかと思います。 MoveToEx(hdc, x, y, NULL); x += 10; LineTo(hdc, x, y); とした場合、きちんと10ドットの線が引かれます。 これが、もし終点の座標も描画に含まれてしまうような仕様だったら、ロジック上では10ドット描画しているように見えるのに、実際には11ドットの線が引かれてしまうことになってしまい混乱してしまうかもしれません。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

少なくとも Windows3.1 の時代から, 座標はピクセルそのものではなく「ピクセルの境界」についています. 方眼紙を想像してもらえればいいかな.

cern5100
質問者

お礼

遅くなりました。回答ありがとうございます。 ピクセル上だと思っていました。

  • a_kwn
  • ベストアンサー率34% (8/23)
回答No.2

例えば、 点A:(0,0) - 点B:(10, 0) 点B:(10,0) - 点C:(20, 10) と、2つの直線を連続で描画した場合に、始点、終点共に描画するルールだと、 「点Bを2回書いてしまうこと」 が、R2_XORPEN 等で描画した場合にまずいからではないでしょうか?

cern5100
質問者

お礼

遅くなりました。回答ありがとうございます。

関連するQ&A