いつのまに!2点。 | 王様の耳はロバの耳

王様の耳はロバの耳

ゆがんだかがくしゃのたのしいにっきだよ

日本語のOpenCV本、でてるし!

OpenCV プログラミングブック/奈良先端科学技術大学院大学 OpenCVプログラミングブック制作チーム
¥3,570
Amazon.co.jp


http://book.mycom.co.jp/book/978-4-8399-2354-9/978-4-8399-2354-9.shtml



てゆか「著者:奈良先端科学技術大学院大学 OpenCVプログラミングブック制作チーム」ってのがアニメの制作委員会風味でイカス。

…てゆか印税どうすんのかな?飲み会代?
さらに挿絵とかのサンプル画像がNAIST風味。

これはぜひともわが国に持ち帰らねば!



それから、WiiRemote関係で、実は任天堂から公式に許されているっぽいアクセス方法を発見。

http://www.nintendo.co.jp/wii/q_and_a/093.html#category05

インターネットチャンネル向けWebページでJavaScriptを書けば、Operaが対応してくれるらしい。知らんかった。

以下抜粋。


■window.opera.wiiremote オブジェクト


update(num):num には 0~3 の番号が入ります。各プロパティは以下のとおり。


isEnabled:接続されている場合は1。
isDataValid:データが有効な場合は1。(?)
isBrowsing:ブラウジングをする権利がある場合は 1。(?)
dpdX,dpdY:ポインティング位置。正面がゼロで右下がプラス方向。
hold:ボタンを押している間は対応したボタンのフラグが立つ。ボタンの取得方法は上のURL参照。
isBrowsing:1であるとリモコンの値は取得できません(ブラウズ中?)。
dpdRollX,dpdRollY:カーソルの傾き方向ベクトル。ベクトルの長さは1 で、右下がプラス方向。これはセンサーバーIR2点の高さの差から取得しているはず。
dpdDistance:センサーバーとWiiリモコンの距離。遠いほど大きい値。これはセンサーバーIRの2点間距離ね。
dpdValidity:ポインティング位置を認識するために用いることのできたオブジェクトの個数を保持します。通常は 1 または 2 であり、 0 は無効を意味します。マイナス値を保持していた場合、認識結果があまり信頼できないことを示します。

なるほどなるほど。dpdValidityの説明は役に立ったな。

Wiiで試せるページはこちら


以下コード。

function UpdateWiiRemote()
{
	for (i=0; i<4; i++)
	{
		var pad = opera.wiiremote.update(i);
		var mes = "";
		if (pad.isEnabled && pad.isDataValid)
		{
			mes += "位置 ";
			if (pad.dpdValidity > 0)
			{
				mes += "( " + round2(pad.dpdX) + " , " + round2(pad.dpdY) + " )<br>";
				
			}
			else
			{
				mes += "( --- , --- )<br>";
			}
            var rad = Math.atan2(pad.dpdRollY, pad.dpdRollX);
            mes += "傾き : " + round2(rad * 180 / Math.PI) + "度<br>";
            mes += "距離 : " + round2(pad.dpdDistance) + "<br>";
			var hold = pad.hold;
			mes += "ボタン : " + 
					isHold(hold, 1, "←") +
            		isHold(hold, 2, "→") +
                	isHold(hold, 4, "↓") +
                    isHold(hold, 8, "↑") +
                    isHold(hold, 16, "+") +
                    isHold(hold, 4096, "-") +
                    isHold(hold, 512, "1") +
                    isHold(hold, 256, "2") +
                    isHold(hold, 2048, "A") +
                    isHold(hold, 1024, "B");
        }
        else
        {
        	mes = "未接続";
        }
        document.getElementById("p"+i).innerHTML = mes;
    }
}

function StartTimer()
{
	if (window.opera && window.opera.wiiremote)
	{
		setInterval('UpdateWiiRemote()', 100);
	}
	else
	{
		document.getElementById("message").innerHTML = "インターネットチャンネルではないためサンプルページは正しく動作していません。";
	}
}