[Qt-users:391] Re: 矩形の重なり判定

Chironian chironian123 @ gmail.com
2014年 12月 16日 (火) 19:05:05 JST


 こんにちは。ケイロニアンです。

> ドキュメントではQRectとQRectFで、Emptyに対する説明が異なっています。

 私も最初はこれかと思いました。でも、説明は異なってますが、仕様的には同
じでした。何言ってるか分かりませんね。(汗)

 大昔、サブピクセル?なにそれ美味しいの?って時代は、矩形を左上コーナー
の座標と右下コーナーの座標で定義することが多かったです。右下も矩形内部の
座標として定義してましたので、width=right-left+1となります。

 説明を見るとQRectもこの定義になっているようです。確かどこかに「歴史的
理由」って書かれていたので、分かっちゃいるけど、もう直せないってやつと思
います。
 QRectのempty条件left > rightは、width=right-left+1なので、変形すると

        0 > right-left
        0 > width-1
        1 > width

 widthは整数なので、

        0 => width

となり、QRectFの条件と一致するのですよ!!
 右下コーナー座標を矩形の中に含めたことを激しく後悔する瞬間です。

                *

> 個人的には QRectangle(F) クラスを作って、Qt の中で QRect(F) を使っている
> コードを全部 QRectangle(F) に置き換えてで QRect(F) を非推奨にするのが
> いいかなぁと思います。

 realとintの差だけなら、templateで定義できたらかっこいいですね!!
 QRectFをコピペして、そらみみさんの思いを込めて修正し、公開してみれば、
採用されたりして。
 Qt初心者の私が言うのはおこがましいですが、isNullって必要性が見えない割
に混乱するし、contains等でNullやEmptyチェックはしない方が良いと私も思い
ます。(需要がある以上、よりプリミティブな関数も提供した方が良いので。)

以上


Qt-users メーリングリストの案内