2014年04月28日

SurfacePro2アップデート

ぜんぜん気が付かなかったのですが、Surface Pro 2 でこんなアップデートが来てたみたいですね
http://www.digitalgrapher.com/2014/04/type-cover-2windows-81-update-1.html

スライドパッドがとにかく使いづらいというのは激しく同意です。アップデートで少しはマシになるかな…?
posted by JUNOSOFT at 04:21| Comment(0) | 雑談

2014年04月22日

続 SurfacePro2

Surface Pro 2 がようやく届きまして、普段デスクトップでしか使ってなかった Win8.1 を初めて本格的にタッチパネルで使ったのですが…

タッチキーボードが微妙すぎる…

まず、デフォルト状態のタッチキーボードだと、上下のカーソルキーとファンクションキーが付いていません。文字を打つのに特化している感じです。
(※ちなみに、このタッチキーボードは「Windows簡単操作」のスクリーンキーボードとは異なります)

そこで「ハードウェアに準拠したキーボードにする」を設定すると、通常のキーボードとそっくりな外観のタッチキーボードが出てきます。
ファンクションキーだろうが Alt だろうがやりたい放題です。ただ… なぜかアンダーバーがないんですね…。

そこで、タッチキーボードではなく、「Windows簡単操作」で使えるようになるスクリーンキーボードを出してみると、ディスク購入したほうの Win8.1 で使えるスクリーンキーボードと微妙に異なるんですこれが。
アンダーバーのキーが見当たらないんです。ディスク版 Win8.1(正確にいうと、ディスク版 Win8 購入後に 8.1 にアップデートしたやつ) のスクリーンキーボードではちゃんと右Shift の横に「ろ」のキーがあり、それにアンダーバーもついているのですが、Surface Pro 2 の Win8.1 だと、そもそもスクリーンキーボードにひらがなが表示されていません。記号とアルファバットのみが刻印されている感じです(しかし英語版キーボードというわけでもない)

Google先生に聞いてみるといくつか似たような質問があるのですが、「ろ」のキーにアンダーバーがあるでしょ何言ってんすか みたいな冷たい回答があるだけです。正直よくわかりません。
ディスク版 Win8.1 なら確かにそのキーがついてるんですけどね、Surface Pro 2 のやつにはないんですよ!!

なにか見落としているだけという気もしますが。

結局いまのところ、アンダーバーを打つにはデフォルト状態のタッチキーボードに戻して記号入力モードにして打ち込むか、日本語で「あんだー」と入れて変換するかしかありません。
うわあああああああああああ
posted by JUNOSOFT at 02:43| Comment(0) | 雑談

2014年04月11日

ベジェ曲線の微分

さて今回、とあるキャラクターを動かす時に、その移動経路をベジェ曲線で指定するようにしてみました。
移動そのものはサクサクできたのですが、キャラクターが常に進行方向を向くようにするという処理で少々時間がかかってしまいました。
最初に思いついたのは、実際の直前の位置と現在位置から移動量 (dx, dy) を取得し、これを逆三角関数 atan につっこむ方法です。当たり前ですが、これだと移動量が (0, 0) になった時(つまり停止中)に向きを定義する事が出来ません。
なら、移動中だけ向きを更新して停止中は向きを変更しなければよい、ということになります。しかしそれでは生成直後の向きがやっぱり分かりません。もちろん初期角度を決めても良いのですが、手入力した初期角度と実際の移動向きが一致しないと向きがパッと切り替わったように見えてしまいます。
「初期角度は違和感がないように注意して入力してね」で解決しますが、なんだか悪い予感しかしません。

そして「ベジェ曲線といえどもプログラムで描画するときは折れ線で近似しているんだから、その折れ線の向きをそのまま使えば良いじゃないか」という当たり前の結論になったわけですが、この折れ線、描画したものは滑らかに見えても、その向きにキャラクターを自動回転させると、キャラクターの向きがカクカク変わっているように見えてしまいます。

どうしようかなーと考えた時、やっと思いついた(というか真っ先に思いつくべきだった)のですが、そもそもベジェ曲線は媒介変数 t を使った x と y の式であって、知りたいのはその接線の向き(傾き)なのだから、このを微分するだけで問題解決なわけです。

というわけで

0 <= t <= 1
A = (x0, y0)
B = (x1, y1)
C = (x2, y2)
D = (x3, y3)

とおいたとき、ベジェ曲線の式は

P = A (1-t)^3 + 3 B (1-t)^2 t + 3 C (1-t) t^2 + D t^3

これを展開して t についてまとめると

P = (-A + 3B - 3C + D) t^3 + 3(A-2B+C) t^2 + 3(-A + B) t + A

これを t について微分すればよいので

P' = 3(-A + 3B - 3C + D) t^2 + 6(A-2B+C) t + 3(-A + B)

で接線の傾きを求める事が出来ます。
posted by JUNOSOFT at 09:57| Comment(0) | プログラミング

2014年04月10日

バージョン管理ツールのコミットログ

バージョン管理ツールを使っていると、当然コミット時にコミットログを書くことになるわけですが、特にフォーマットがあるわけでもなく、自由に思いつくままに書いていました。
が、ログを見返した時わかりづらい部分が多くなってきたので、そろそろ統一しようかなあと考えていたところです。

あまり細かいフォーマットだとログを書くこと自体が面倒になるし、あまりに大雑把だとログの意味が無いしで悩んでいたのですが、結局、変更種類と変更目的、場合にり変更箇所を書くのがよい、という結論になりました。

「変更種類」は以下の4つ:
追加 → 今までになかった動作を追加した
変更 → 動作内容が変化した(仕様が変更された)
修正 → 間違っていた動作を直した(仕様に変更なし)
リファクター → 動作に影響を与えない変更全般。ソース整形、クラスわけの修正など。コメント修正、タイプミス修正も含む


「変更目的」は、つまり変更理由です
簡潔に、「〜のバグ修正」とか、「○○が△△になるよう変更」 とか、そんなふうに書いています


「変更箇所」は差分を見れば一目瞭然なので、基本的には書かなくていいのですが、「差分を見ないとわからない」というのもアレだし、ログ一覧を見たときにすぐにわかるようにしたいので、一言だけ変更箇所を書いておくようにしています。
「○○クラス」とか、あるいは単に「描画関数」とか、本当に一言。変更箇所が多数にわたる場合は省略してます(それこそ差分をみてくれ、という感じ)

posted by JUNOSOFT at 06:18| Comment(1) | 雑談