画像処理 その6
■ このスレッドは過去ログ倉庫に格納されています
006143
2006/02/25(土) 12:02:24>>56
>>58の四捨五入方法にしてデータをまとめてみました。(x方向のみ)
ウィンドウ: WX1 = -50, WX2 = 50 (幅: 100)
ビューポート: VX1 = -67, VX2 = 67 (幅: 134)
位置: PX → QX への座標変換は
[式A] QX = ((PX - WX1) * (VX2 - VX1) + (WX2 - WX1) * VX1) / (WX2 - WX1) において
分子: a = (PX - WX1) * (VX2 - VX1) + (WX2 - WX1) * VX1
分母: b = WX2 - WX1
として、四捨五入を行う以下の整数除算により行う。
[式B] QX = K * (2 * a + b) / (2 * b)
※ 係数 K は (a > 0 かつ b > 0) の場合 1、それ以外で -1 とする。
また、a, b は絶対値を用いる。
(上記式では、負数の場合も正方向へ四捨五入するためこのようにしました)
問題のあるデータは・・・
PX = -28 のとき QX = (-1) * (2 * abs(-3752) + 100) / (2*100) = 38.02
QX の結果 API = -37, [式B] = -38, [式A(double)] = -37.52
※ 四捨五入対象なのに API ではされていない。
PX = -25 のとき QX = (-1) * (2 * abs(-3350) + 100) / (2*100) = 34.00
QX の結果 API = -33, [式B] = -34, [式A(double)] = -33.50
※ 四捨五入対象なのに API ではされていない。
PX = 22 のとき QX = 1 * (2 * abs(2948) + 100) / (2*100) = 29.98
QX の結果 API = 30, [式B] = 29, [式A(double)] = 29.48
※ 四捨五入対象ではないのに API ではされている。
以上のように [式A(double)] の結果の小数部が 0.5 前後のデータでAPI と誤差が発生しています。
他のデータでは、四捨五入が正の数ではプラス方向へ、負の数ではマイナス方向へ正しく行われて API、[式B] とで誤差は発生しません。
■ このスレッドは過去ログ倉庫に格納されています