あるピクセルをある点を中心に回転させたとき、
回転後の座標は、計算上はピクセルとピクセルの間になってしまうことが多い。
回転後の浮動小数点数の座標情報を利用し、
ピクセルに占める面積比を考えることで
より高度なシミュレーションを行いたいので、そのメモ。
回転後の計算上の座標を(x, y)とする。
回転後の座標が、4つのピクセルをまたいでいるとき
①左上のピクセル ②右上のピクセル
③左下のピクセル ④右下のピクセル
とすると、ピクセルの座標は
①(floor(x), ceil(y))
②(ceil(x), cail(y))
③(floor(x), floor(y))
④(ceil(x), floor(y))
で表される(floorは切捨て、ceilは切上げ)。
ここで、回転後の浮動小数点座標が各ピクセルに対して占めている面積を計算し
回転前のピクセル固有のデータを、回転後4つのピクセルに面積比を乗じて振り分けることで
より正確なデータの回転が行える。
乗じる値はそれぞれ、
① {ceil(x) - x} * {y - floor(y)}
② {x - floor(x)} * {y - floor(y)}
③ {ceil(x) - x} * {ceil(y) - y}
④ {x - floor(x)} * {ceil(y) - y}
である。このとき各値の和は必ず1となり、
座標やピクセルを占める面積比によってデータが大小することはない。と思う。
・・・思っていることを文章にするのは難しい。
1か月後の自分はこの文章を読んで理解できるだろうか。
回転後の座標は、計算上はピクセルとピクセルの間になってしまうことが多い。
回転後の浮動小数点数の座標情報を利用し、
ピクセルに占める面積比を考えることで
より高度なシミュレーションを行いたいので、そのメモ。
回転後の計算上の座標を(x, y)とする。
回転後の座標が、4つのピクセルをまたいでいるとき
①左上のピクセル ②右上のピクセル
③左下のピクセル ④右下のピクセル
とすると、ピクセルの座標は
①(floor(x), ceil(y))
②(ceil(x), cail(y))
③(floor(x), floor(y))
④(ceil(x), floor(y))
で表される(floorは切捨て、ceilは切上げ)。
ここで、回転後の浮動小数点座標が各ピクセルに対して占めている面積を計算し
回転前のピクセル固有のデータを、回転後4つのピクセルに面積比を乗じて振り分けることで
より正確なデータの回転が行える。
乗じる値はそれぞれ、
① {ceil(x) - x} * {y - floor(y)}
② {x - floor(x)} * {y - floor(y)}
③ {ceil(x) - x} * {ceil(y) - y}
④ {x - floor(x)} * {ceil(y) - y}
である。このとき各値の和は必ず1となり、
座標やピクセルを占める面積比によってデータが大小することはない。と思う。
・・・思っていることを文章にするのは難しい。
1か月後の自分はこの文章を読んで理解できるだろうか。