以下のメッセージを削除します。


[2022] Re:『Java謎+落とし穴徹底解明』の正誤について
返信


投稿者:(ぱ)こと管理人
2017/11/16 01:05:52

Link:
>と (あるいは、いっそ adjustBoundary() の中身を resize() に移動) されなかったのは
>どうしてかと思いまして。 adjustBoundary() は意味的に引数をとるような処理ではないし、
> resize() では今後の拡張次第で別の処理もありうるがこのバージョンでは >adjustBoundary() だけ、ということなのでしょうか……。

resize()はリサイズですし、adjustBoundary()は範囲合わせなので別の名前で
別のメソッドにするのが自然なように思います。
確かにこのケースでは、resize()の時しかadjustBoundary()は呼びませんが、
たとえば私が大昔に作ったこちらのプログラム

http://kmaebashi.com/programmer/serializer/draw.html

では、ZoomやPanの機能があります。このプログラムでは、Zoom時は
別ウインドウが開くのでちょっと特殊ですが、

・マウスで長方形を指定すると、その範囲がウインドウ全体になるように
 拡大されるZoom機能。
・マウスで座標を指定するとその位置が中心になるように移動するPan機能。

といったものを考えると、

「ワールド座標系で範囲を設定し、adjustBoundary()を呼び出せばけりがつく」

というのは、悪くない方針のように思います。

ただ、そういう意味だと、むしろ「ワールド座標系で範囲を設定し…」の部分が
「事前に変数に値を設定しておく」というグローバル変数渡しまがいで
気持ちが悪いので、むしろadjustBoundary()にはxmin, ymin, xmax, ymaxを
引数として渡すべきだったかな、と思わなくはないですが、
それはそれでウインドウサイズを変えた時にはデバイス座標系での領域変更が
起点になるわけで、では入口のメソッドとしてデバイス座標系起点のadjustBoundaryByDc()とワールド座標系起点のadjustBoundaryByWc()を作って
前者にはwidth, heightを、後者にはxmin, ymin, xmax, ymaxを渡そうか、
とか考え始めるときりがないですね。
まあ、このあたりは、何が正解とも言えない話なのではないかと思います。

パスワード:

管理者削除