TKYM's profile※ 画面は開発中のものですPhotosBlogListsMore Tools Help

Blog


    November 27

    Silverlightでは右クリックが使えない。

    よくよく考えてみれば、ブラウザ上で動くわけだから右クリックすると "Silverlight について" などと表示されるはずで、仕方ないことである。
     
    それを知るために、単純にGoogle 検索したのだが、
    silverlight + 右クリックの検索では、目的のコンテンツを得ることは出来ない。
     
    「~を右クリックして、メニューから~を選び・・・」
    などと、操作説明が大量にヒットして邪魔をする。
     
    そして無理にとった手法がこれ
     
    silverlight "右クリック" 処理 -"右クリックし" -"右クリックする" -"右クリックをする" -"右クリックメニュー" -"右クリックすると"-"右クリックすれば" -"右クリックをすると"
     
    結局見つけたのはMSDN の1ページ
     
    Silverlight 2 は現在、マウスの右ボタン イベントをサポートしていません。Silverlight 2 は、本質的にブラウザでホストされるプラグインであり、そのホスト ブラウザのプラグイン モデルに依存するので、入力シナリオを特定するのは困難です。マウスの右クリックのキャプチャは、その一例です。
     
    検索って難しい
    November 25

    凸包を得る

    凸包とは、 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIH_jaJP222JP222&q=%e5%87%b8%e5%8c%85

    板の上に幾つも釘を打ち、外周から輪ゴムをかけて、ゴムと接している釘で構成される多角形。
    これを得るのはなんだか面倒な気がした。
    輪ゴムはすごいと思う。

    まず、端にある点を基準として、それに対する角度の順に点を並び替える。
    並び替えた順に点を見ていき、一つ前の点H 現在の点I 次点J の角度∠HIJ が マイナスの場合、
    凹みであると判断して、点Iを削除する。

    //凸包を得る
    static public PointF[] convex_hull(PointF[] points) {
    List<KeyValuePair<float, PointF>> dict = new List<KeyValuePair<float, PointF>>();

    //Y最小値を見つける
    int max = 0;
    for (int i = 1; i < points.Length; i++) {
    if (points[max].Y > points[i].Y)
    max = i;
    else if (points[max].Y == points[i].Y && points[max].X < points[i].X) {
    max = i;
    }
    }

    //角度とともにlist に格納する
    for (int i = 0; i < points.Length; i++) {
    if (i == max)
    {
    dict.Add(new KeyValuePair<float, PointF>(0, points[i]));
    }
    else
    {
    float theta = (float)Math.Atan2(points[i].Y - points[max].Y, points[i].X - points[max].X);
    if (theta < 0) theta = 2 * (float)Math.PI + theta;
    dict.Add(new KeyValuePair<float, PointF>(theta, points[i]));
    }
    }
    //ソートする
    System.Comparison<KeyValuePair<float, PointF>> cmp = new Comparison<KeyValuePair<float, PointF>>(cmpfunc);
    dict.Sort(cmp);

    //順に比較し、不要な点を排除していく
    List<int> del = new List<int>();
    for (int i = 1; i < dict.Count; i++) {
    int h = (i - 1 + dict.Count) % dict.Count;
    int j = (i + 1) % dict.Count;

    float theta1, theta2;
    theta1 = (float)Math.Atan2(dict[i].Value.Y - dict[h].Value.Y, dict[i].Value.X - dict[h].Value.X);
    if (theta1 < 0) theta1 = 2 * (float)Math.PI + theta1;
    theta2 = (float)Math.Atan2(dict[j].Value.Y - dict[i].Value.Y, dict[j].Value.X - dict[i].Value.X);
    if (theta2 <= 0) theta2 = 2 * (float)Math.PI + theta2;

    if (theta2 - theta1 < 0) {
    dict.RemoveAt(i);
    i--;
    }
    }

    //戻り値用の配列に格納
    PointF[] result = new PointF[dict.Count];
    for (int i = 0; i < dict.Count; i++) {
    result[i] = dict[i].Value;
    }

    return result;
    }


    このシリーズの他記事: http://prog-city.spaces.live.com/lists/cns!E5379F11D9E8BB3F!1047/


    November 07

    Yahooブリーフケース有料化

    ヤフーは、オンラインストレージサービス「Yahoo!ブリーフケース」を12月1日からYahoo!プレミアム会員およびYahoo! BB会員専用のサービスに変更する。無料の一般会員が保存したファイルについては、2009年2月2日にすべて削除する。 (internet.watch)

    http://internet.watch.impress.co.jp/cda/news/2008/11/06/21434.html

    Skydrive が出来てからはずっと使っていなかった。
    のぞいてみると、かなり懐かしいファイルが・・・。

    無料会員のファイルは 2009/2/2 に全て消されてしまうようなので、早めに落としておいた方がよさそう。

    今後は、 Gmail のストレージか Skydrive だろうか。

    November 04

    鍵盤を3D表示

    今、 鍵盤を XAML の 3D で表示したいと思っている。
    XAML は 最近の UI を記述するためのマークアップ言語である。
    その XAML に DirectXほどではないが ちょっとした3D を表示する機能がある。
     
    しかし、XAML を直接記述しようと思っても、 3角形の座標を 羅列して形を作らねばならないから、
    気の遠くなる作業となる。
     
    ZAM3D というソフトがあるらしいが 有償なのですぐに購入というわけには行かない。
    そこで、手持ちの 古い Shade 6 を取り出し、dxf を吐かせ、
    どこかで公開されていたコンバーターを落としてきて、変換させてみることにした。
     
    その前に、モデリングが必要である。
    実は過去に挫折しているので上手く行かないような気がする。
    呪いの鍵盤
    何とかそれっぽい白い鍵盤を用意した。
     
    これを、XAMLに変換してみると・・・。
    呪いの鍵盤パラドックス
    こんな感じ。とても使えそうにない。
     
    そしてもう一度反省を込めて作り直した。 Shade での状態。
    kansei
     
    自分としては上手く言ったように見えたが、この段階で、眠くてなぜか形状データがなくなってしまった。
    ちなみに、画像はないが、上図の鍵盤の1つを変換したところ、上手く変換されていた。
     
    やっぱり、 Shade はやめて、スクリプトか何かで自動的に生成しようと思う。
     
    WPF の本のコーナーになく、「ひょっとしたら・・・」と思い、別の棚を見たらあった。
    XML の本の棚に。