私は卒研でJava3Dをやりつつ、趣味でiアプリを作っています。
先日ドコモマーケットがオープンしまして、一般人がアプリを作って売ることができるようになりました!アップルストアやアンドロイドマーケットみたいなもんですね。こうスマートフォン旋風に逆らっていく感じが好きです。
そこで、せっかくしばらく登録費が無料なので、アプリを公開してみることにしました。
http://killingtime00.web.fc2.com/iAppli/StandardMemo/StandardMemo.html
こんな感じ。
省略して説明すると、このアプリを待ち受け画面に設定しておくと、その待ち受け画面に付箋メモのように簡単なメモをペタペタ貼っていくことができるようになるアプリです。
このアプリ便利なのかってそれはもう私自身が使うっちゃうくらい便利です。
ちょっと思い出した買い物リストを書くときとか、待ち受け画面でクリアキー押して、右ソフトキーオスだけでメモ作成ができます。
しかも待ち受け画面に表示されるのでちょいちょい見れて忘れにくい。
私みたいに忘れっぽい方にはもってこいですね。
とCMしたところで、別にこのブログ誰が見てるわけじゃないんですがw
自分で作っておいてなんですが、便利です。
ですが、ソース自体はめちゃくちゃ簡単なことやってるだけです。
こんな感じでアイデアがマーケットで売れるのってすごいやってみて感動しました。
かんたんなので、もう少しいろいろ作ってみようかなと思います。
ちなみにアプリは105円で売ってますw
私へのお小遣いと思って寄付する気持ちで・・・w
このブログを検索
2010年12月31日金曜日
2010年11月6日土曜日
Java3dと加速度センサ1 ~傾斜器として使ってみる~
研究でJava3d+加速度センサを使っているので、そのテクニックをちょっと記してみようと思います。
(常識であることが多いです。当たり前の確認としてみてください。)
てか、自分の議事録用だからまぁなんでもいいですよね。
一番初めに、軸の指定ですが、
加速度センサの話をする際、
上下(重力方向)をZ、奥行きをX、左右をYとして話をしています。
実際にJava3dで扱う際は、表示にもよりますが基本
上下がY、奥行きをZ、左右をXとして数学の座標系を扱うようです。
今回は加速度センサの話なので、上を使いました。プログラムに起こす際は気をつけましょう。
まず使用。
自分が愛用しているセンサは こちら です。
使用は、本体から3軸に向けた加速度が取得できます。
取得できる値に関して、簡単なイメージですが、
基本状態だとこんな感じで、角軸に加速度がかかっています。
停止しているときは、重力加速度1G分がZ方向に加わるので、センサはZに1を示すはずです。
それを横(Z軸)に若干回転したのち、Y軸に若干回転すると以下の図になります。
まぁなんとなくこんな感じで、加速度センサに表示される数値は
停止しているときは、重力加速度の分解値になるわけですね。
と、いうことは
停止時にこのセンサ値を何とかすると、加速度センサの傾きが検出できるのではないか?
ということにはまぁ、みなさんなりますよね。当たり前ですよね。
はい。ということでやってみましょう。
と、言いたいところですが、
残念ながらできません。
なぜかというと、Z軸に関する回転がとれないからです。
(図中のZ軸とは上下に伸びる線、すなわち、重力がかかる方向を指します。)
たとえば、初期の状態(図1)だと、センサの値はZに1です。さっきも言いました。
ですが、Z軸に対してπ/8回転してみましょう。
こ、これは。
横方向に開店したところで、センサの検出値はZに1のままなのです。
結局センサ自体の状態は変わっていないから当たり前ですが。
すなわち、この方向の回転は加速度センサだけではさばききれないというわけです。
はい。前置きはここまでで、実際何ができるの?
1、傾斜器ができます。
1軸に対する傾斜器は、簡単で、横から見た図を思い浮かべましょう。
こんな感じで、θだけ傾けた場合を考えます。
この状態で停止していると、黄色ベクトルのように地面方向に1Gの加速度がかかっているので
センサはX、Yにピンクベクトルのように値を示します。
元の大きさが1Gだとすると、自然と
X=1*sinθ Y=1*cosθ
と、なります。
X、Yの値が検出されるということなので、逆に
θ=arcSinX となるわけです。
こう考えるとセンサの状態を角度で取得するのは(1軸だけならば)簡単で、
検出された値をarcSinするだけになります。
したがって計算したθの値を、Java3Dなどでオブジェクトに反映させることで
1軸だけならば、加速度センサの状態と、表示するオブジェクトの状態を対応させることが可能となるわけです。
たとえば加速度センサをくるくる回すと、表示されているオブジェクトもくるくる回るみたいな。
θが計算できるので、もちろん加速度センサの角度を数値で取得することも可能となります。
以上。
2010年11月1日月曜日
Java3d での動的な物体の追加と削除
Java3dで物体を追加すると
こういう構造になっていると思います。
物体の追加は、まぁいろんなところに書いてある通りです。
普通に追加したいのであれば、
branchG.addChild(new ColorCube(0.3));
とすればBranchGroupの下にColorCubeが追加されます。
座標変換が必要であれば、図のようにTransformGroupを挟めばよいですが略。
ただ、動的にとなるとひとつ加えます。
BranchGroupのほうに
branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
みたいに書きます。
オブジェクトの動的追加を許可しますよ的なね。
branchG作った直後に書けばいいです。
そうするとbranchGにならば動的にオブジェクトを追加できるようになります。
例
BranchGroup branchG = new BranchGroup();
branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
んで動的処理のところに
branchG.addChild( Node );
で、意外とあんまり書かれてなかったので削除方法
同様に動的追加を許可します。branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
そんでもって削除はたぶんBranchGroup単位でしかできません。
(てかremoveChild()は動的に使えないの??わからない。)
ですので、上の図の構造だとBranchGroup以下の部分全部消えてしまいます。
てかできないかもしれない。やらなくていいし。
なので、消したい部分をまた別のBranchGroupにわけて、元のBranchGroupの下に置きます。
こんな感じ
すると、今までの部分は削除せずに
以下BranchGroup2に追加していく部分だけ、動的に削除することが可能となります。
何ができるかというと、
一度描画してあるCubeなどを、ボタン操作で消すことができたりします。
~注意~
まず許可が増えます。
増えるのは、親のBranchGroupのほうで
branchG.setCapability(BranchGroup.ALLOW_CHILDREN.WRITE);
branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
としておきます。
書き込みと、追加の許可?みたいな。
そして、BranchGroup2のほうでも
branchG2.setCapability(BranchGroup.ALLOW_CHILDREN_DETACH);
と、しましょう。
そして動的処理のところで
branchG2.detach();
とするとBranchGroup2以下の部分が削除されます。
ちなみにもっかい表示したかったら
branchG.addChild(branchG2);
ともう一回すればよいです。(当たり前ですよね)
2010年10月27日水曜日
登録:
投稿 (Atom)