Top | puarts.com
映像・CG・画像処理関連の技術情報、個人作品の創作記録、メモなど
Category

0   1  2  3  4  5  6  

PHP でブログに関連記事機能を追加する

公開日: 2017/12/03 17:30 | カテゴリ: PHP | タグ: PHP, ブログ開発

このブログ、昔 sqlite と PHP で作ってから、そのままだったのですが、久しぶりに関連記事機能を追加してみました。(個別の記事ページだけに追加)

本当は記事同士の関連度を記事内容から判定して、関連度上位の記事一覧を表示するのがいいのですが、とりあえず以下のような感じで簡易的に実装しました。

  • sqlite データベースに記事ごとのタグを手動で登録
  • 最新の記事から順番にタグがひとつでも一致する記事を検索して 5 つを表示

本当はオフラインでこの辺を事前にやっておいて、html 作っておくのがいいんですが、そこまでやると大変そうだったので、とりあえず毎度構築する感じになっているので、少しブログ重いかもしれません..

しばらくはこれで運用しつつ、また気が向いたら改善しようと思います。

あまり参考にならないと思いますが、一応 PHP の関連記事作成部分だけ貼っておきます。

関連記事の作成

private function areRelatedEntry($entry0, $entry1)
{
    foreach ($entry0->tagList as $tag0)
    {
        foreach ($entry1->tagList as $tag1)
        {
            if ($tag0 == $tag1)
            {
                return true;
            }
        }
    }
    return false;
}

private function createRelatedArticles()
{
    $maxRelatedEntryCount = 5;
    for ($i=$this->size-1; $i >= 0; --$i)
    {
        $entry0 = $this->data[$i];
        if (count($entry0->tagList) == 0)
        {
            continue;
        }

        for ($j=$i - 1; $j >= 0; --$j)
        {
            $entry1 = $this->data[$j];
            if (count($entry1->tagList) == 0)
            {
                continue;
            }
            
            if ($this->areRelatedEntry($entry0, $entry1))
            {
                if (count($entry0->relatedEntries) < $maxRelatedEntryCount)
                {
                    array_push($entry0->relatedEntries, $entry1);
                }
                if (count($entry1->relatedEntries) < $maxRelatedEntryCount)
                {
                    array_push($entry1->relatedEntries, $entry0);
                }
            }
        }
    }
}

関連記事の html タグ作成

public function getRelatedEntriesTag()
{
    $tags = '
'; $tags .= '

関連記事

'; return $tags; }

  このエントリーをはてなブックマークに追加  

ファイヤーエムブレムヒーローズ「愛が溢れる投票対戦」ガチャの色ごとのレアリティ排出率

公開日: 2017/12/02 18:30 | カテゴリ: Note | タグ: feh

ファイヤーエムブレムヒーローズで、2017年12月02日より始まった「愛が溢れる投票対戦」ガチャの特定の色を引いた時の各レアリティ出現率を excel で算出してみました。

結果は以下のテーブルの御覧通りですが、まとめると、Aブロックのピックアップは白を引いた時が 5.7 %、緑を引いたときが 4 %、赤を引いたときが 2.5 %で、B ブロックのピックアップは赤を引いた時が 5.9 %、緑を引いた時が 4 %、青を引いた時が 2.9 % の確率でした。緑はピックアップ1個だけでも比較的ピックアップが出やすいので、あったらついでに引いておくとよさそうです。

Aブロック


星3数 星4数 非ピックアップ星5数 ピックアップ星5数 合計数
15 28 32 1 76
12 26 24 0 62
9 18 16 1 44
13 24 19 2 58
合計 49 96 91 4 240







星3確率 星4確率 非ピックアップ星5確率 ピックアップ星5確率 色の出る確率
0.1102040816 0.1691666667 0.0105494505 0.0075 0.2974201988
0.0881632653 0.1570833333 0.0079120879 0 0.2531586866
0.066122449 0.10875 0.0052747253 0.0075 0.1876471743
0.0955102041 0.145 0.0062637363 0.015 0.2617739403
合計 0.36 0.58 0.03 0.03 1







色ごとの星3確率 色ごとの星4確率 色ごとの非ピックアップ星5確率 色ごとのピックアップ星5確率 合計
0.3705332794 0.5687800201 0.0354698524 0.0252168482 1
0.3482529733 0.6204935547 0.031253472 0 1
0.3523764706 0.579545098 0.0281098039 0.0399686275 1
0.3648575712 0.5539130435 0.023928036 0.0573013493 1
合計 0.36 0.58 0.03 0.03 1

Bブロック


星3数 星4数 非ピックアップ星5数 ピックアップ星5数 合計数
15 28 32 2 77
12 26 24 1 63
9 18 16 1 44
13 24 19 0 56
合計 49 96 91 4 240







星3確率 星4確率 非ピックアップ星5確率 ピックアップ星5確率 色の出る確率
0.1102040816 0.1691666667 0.0105494505 0.015 0.3049201988
0.0881632653 0.1570833333 0.0079120879 0.0075 0.2606586866
0.066122449 0.10875 0.0052747253 0.0075 0.1876471743
0.0955102041 0.145 0.0062637363 0 0.2467739403
合計 0.36 0.58 0.03 0.03 1







色ごとの星3確率 色ごとの星4確率 色ごとの非ピックアップ星5確率 色ごとのピックアップ星5確率 合計
0.3614194207 0.5547899657 0.0345974146 0.0491931989 1
0.3382326002 0.6026399327 0.0303542077 0.0287732594 1
0.3523764706 0.579545098 0.0281098039 0.0399686275 1
0.387035211 0.5875823022 0.0253824867 0 1
合計 0.36 0.58 0.03 0.03 1

計算のために作った excel ファイルも貼っておきます。feh_gacha_rate-20171202.xlsx

  このエントリーをはてなブックマークに追加  

C++ MSTest で浮動小数点数型の比較

公開日: 2017/12/02 16:00 | カテゴリ: C/C++ | タグ: C++, MSTest

今まで C++ MSTest で float や double といった浮動小数点数型を比較するとき、私はわざわざ以下のように自前で比較関数を用意して書いていました。

TEST_CLASS(MyTest)
{
public:
    TEST_METHOD(Test0)
    {
        float value = ...;
        Assert::IsTrue(AreEquals(1.5f, value, 0.000001f));
    }

private:
    bool AreEquals(float lhs, float rhs, float eps)
    {
        return fabs(lhs - rhs) <= eps;
    }
};

ところが、よく見たら標準の Assert 関数にちゃんと誤差を加味した関数あるじゃないですか..

TEST_CLASS(MyTest)
{
public:
    TEST_METHOD(Test0)
    {
        float value = ...;
        Assert::AreEqual(1.5f, value, 0.000001f);
    }
};

そりゃないと面倒ですもんね..今更気が付くとは。最初にちゃんとドキュメント読めって話ですね。

  このエントリーをはてなブックマークに追加  

ファイヤーエムブレムヒーローズ「英雄伝承召喚」ガチャの色ごとのレアリティ排出率を計算してみる

公開日: 2017/11/29 | カテゴリ: Note | タグ: feh

このブログではあまりゲームの話題を書かないんですが、feh(ファイアーエムブレムヒーローズ)を密かに続けていまして、これまで数万円課金する程度に遊んでいます。ただ、このゲームのガチャは(というより世の中のガチャは)、出るときは出る、出ないときは全く出ない、といった感じで、ひどいときは2万円課金しても星5すら出ないときもあります。

とはいえ、feh のガチャはランダムで出現した5つのオーブのうち、好きな色を引くことができるので、レアリティの高いキャラの割合の多い色を引けば、少しだけ星5を引きやすくなります。もちろん色を絞ると、消費オーブが増えるのでバランスは難しいところですが。

色ごとの各レアリティの排出率が気になったので、試しに 2017年11月28日より始まった「英雄伝承召喚」ガチャの確率を excel で算出してみました。


星3数 星4数 星5数 合計数
15 28 3 46
12 26 3 41
9 18 3 30
13 24 3 40
合計 49 96 12 157






星3確率 星4確率 星5確率 色の出る確率
0.104 0.169 0.02 0.293
0.0832 0.157 0.02 0.260
0.0624 0.108 0.02 0.191
0.090 0.145 0.02 0.255
合計 0.34 0.58 0.08 1






色ごとの星3確率 色ごとの星4確率 色ごとの星5確率 合計
0.354 0.576 0.0682 1
0.319 0.603 0.0768 1
0.326 0.568 0.1046 1
0.353 0.568 0.0783 1

結果は御覧通りですが、まとめると、緑を引いた時の星5出現率は 10.5 %、白は 7.8 %、青は 7.7 %、赤は 6.8 % 程度の確率でした。緑だけ比較的星5が出やすいのがよくわかりました。もちろん、それに反して色の出やすさは緑が 19.1 %、白が 25.5%、青が 26.0%、赤は 29.3 % と緑は他の色に比べて圧倒的に低いですが。緑が出たときは引いておいた方がよさそうです。

こちらはピックアップしか出ない「英雄伝承召喚」ガチャ向けに計算したものなので、他のパッケージだとまた確率は違ってきますので、その辺は誤解なきよう。

計算のために作った excel ファイルも貼っておきます。feh_gacha_rate-20171128.xlsx

  このエントリーをはてなブックマークに追加  

fbxsdk でアニメーション関連の機能を使ったらリンクエラー

公開日: 2017/11/26 | カテゴリ: C/C++ | タグ: C++, FBX SDK

昔作っていたモデル描画プログラムで fbx ファイルからアニメーション読み込み対応しようと、FBXSDK のアニメーション機能を使ってみたところ、以下のリンクエラーが発生しました。

error LNK2001: 外部シンボル ""public: static class fbxsdk::FbxClassId fbxsdk::FbxAnimStack::ClassId" (?ClassId@FbxAnimStack@fbxsdk@@2VFbxClassId@2@A)" は未解決です。
error LNK2001: 外部シンボル ""class fbxsdk::FbxDataType fbxsdk::FbxColor3DT" (?FbxColor3DT@fbxsdk@@3VFbxDataType@1@A)" は未解決です。
error LNK2001: 外部シンボル ""class fbxsdk::FbxDataType fbxsdk::FbxColor4DT" (?FbxColor4DT@fbxsdk@@3VFbxDataType@1@A)" は未解決です。
error LNK2001: 外部シンボル ""private: static void (__cdecl* fbxsdk::FbxAnimCurveKey::mDeallocatorFct)(class fbxsdk::FbxAnimCurveKey_Impl *)" (?mDeallocatorFct@FbxAnimCurveKey@fbxsdk@@0P6AXPEAVFbxAnimCurveKey_Impl@2@@ZEA)" は未解決です。
error LNK2001: 外部シンボル ""public: static class fbxsdk::FbxClassId fbxsdk::FbxAnimLayer::ClassId" (?ClassId@FbxAnimLayer@fbxsdk@@2VFbxClassId@2@A)" は未解決です。

これまで頂点データの読み込み等は問題なく行えていたので、なぜアニメーション関連の機能だけリンクエラーになるんだろうと思って、ネットで調べたところ、Autodesk のフォーラムで同じ問題にはまっている人がいました。

https://forums.autodesk.com/t5/fbx-forum/cannot-find-static-symbol/td-p/5816698

こちらのフォーラムにあるように私も libfbxsdk.lib をリンクしていたのですが、これではなく libfbxsdk-md.lib の方をリンクしたらビルドが通るようになりました。FBXSDK のライブラリディレクトリには fbxsdk.lib、fbxsdk-mt.lib、fbxsdk-md.lib の3つがありますが、mt と md は意味はわかるのですが、無印のは何用なんでしょうか。アニメーション機能を利用するまでは libfbxsdk.lib でもちゃんとビルド通るし、この lib の役割がよくわからないですね。

  このエントリーをはてなブックマークに追加  
0   1  2  3  4  5  6  

にほんブログ村 デザインブログ グラフィックアートへ
Links

参考になりそうなブログやサイトを見つけたら勝手にリンクを貼らせてもらっています。
リンク削除を希望の場合はお手数ですがメールにてご一報下さい。
Ke-Sen Huang's Home Page        Disney Research        VIDEO COPILOT        AbandonedArt.org
ryoji ikeda        チームラボ        トルク with AR三兄弟        DAITO MANABE

Copyright(C)2006-2017 wsp All Rights Reserved