先日、Vineのカーネルぶっこわして起動しなくなったとき、ブートイメージを書き換えるのにwindowsからlinux領域へファイルを置こうとして使ったのが、上のソフト。windowsのドライブにext2/3のパーティションを割り当てることができ、読み込みだけでなく、書き込みもちゃんとサポートしているソフト。まぁlinux側再起動するときにfsckは行う必要はありますが。
以前の日記で言及した、xsetwacomコマンドによる筆圧感知調整についての続き。xsetwacomコマンドを使うとき、パラメータとして4つの値を一緒に渡すけど、これについてのメモ。
linuxwacomではベジェ曲線を使って筆圧調整を行っており、ここで必要となるベジェ曲線は4個の制御点を使って表現しています。xsetwacomコマンドでパラメータとして渡す4つの値は、制御点2点分の座標を表しています。では残りふたつの制御点はどこかというと、原点(0,0)と最大値(100,100)がデフォルトの制御点として決められています。
%xsetwacom set stylus PressCurve 60 10 40 90
最初の二つの値(60と10)が一つめの制御点の座標で、ここではC1(60,10)とします。後ろ二つの値(40と90)が二つめの制御点の座標で、C2(40,90)とします。
このC1、C2に原点(0,0)と最大値(100,100)の座標の計4つの制御点を使ってベジェ曲線を描き、定義域(x軸の範囲)を元の値として、値域(y軸の範囲)が調整後の値となるようになります。4つの制御点は図のような関係になります(図はそのうち真面目に描きます(泣...)。
なお、C1、C2がとれる座標の範囲は0から100の間の整数です。また、linuxwacomのDocumentでは4つのパラメータ(順にi1, i2, i3, i4とする)の各合計が100になるようにしろと書かれていますが(i1 + i3 = 100, i2 + i4 = 100)、特に文句を言われるわけではありません、例では偶然そうなってますが。
ベジェ曲線の解説は以下を参照しています。始点から、または終点から制御点の間の線分を分割する割合(t)は0.5で、線分をつねに二等分して求めています。
というわけで、念願かなって筆圧調整をしてためし書き。パラメータいじりながらしばし試してみると、どうもgimpの方でもいじるべきところがありそうだということがわかった...、さて次はgimpの補完処理部分を見てみるかorz
筆圧調整に必要なベジェ曲線の算出は、linuxwacom/src/wcmFilter.c:filterCurveToLine()関数で行われており、この関数を再帰的に処理することで近似的にベジェ曲線を求めています。
じつはベジェ曲線算出部分は完全には読みきれてません。っていうかどういう計算してるか把握しきれなくて、その部分だけ切り出して処理をさせて確認したりとかしています。とりあえず、これ以上時間かけてもしょうがないしーみたになノリでやってます。再帰からぬける部分でやってることはわかるけども、計算してる過程がよくわからんorz(wcmFilter.c:filterNearestPoint())
なんかこういうコンピュータサイエンスの初級くさいことにまごついてると、お前は6年間何を勉強してきたんだという気分になって凹む。