トップ «前の日記(28-May-2019) 最新 次の日記(30-May-2019)» 編集

つれづれなるままに

これまでの訪問者人
本日の訪問者人  昨日の訪問者人
月齢13.7

AI | AIきりたん | Ast | Beat Saber | CeVIO | Cn | cover | de | Emacs | En | Es | fr | git | html | iPad | It | Just Dance | misc | MMD | MV | NEUTRINO | OVA | PC | PV | Ru | SF | SKK | stable diffusion | SynthesizerV | tDiary | Th | Vocaloid | VRC | VRChat MMD | Vsinger | Vtuber | was | YuNi | お茶 | アニメ | アメリカ | イラスト | オカリナ | カゲプロ | キズナアイ | テレビ | ノベル | ノーベル賞 | ビートセイバー | フィートセイバー | フランス | ラズパイ | ラノベ | 万葉語 | 世界 | 中国 | 予定 | 即売会 | 台湾 | 台風 | 合成してみた | 同人 | 地震 | 宇宙 | 家電 | 展示 | 描いてみた | 政治 | 旅行 | 日記 | 映画 | 時事 | 書道 | 歌ってみた | 歴史 | 海外 | 演奏してみた | 漫画 | 特撮 | 科学 | 英国 | 訃報 | 語学 | 踊ってみた | 陶笛 | 障害 | 音楽 | 飲み |

29-May-2019 うちちちち [長年日記]

_ [アニメ] 消滅都市

段々と広がっていた風呂敷が少しづつたたまれてる感じ?

でも、まだまだ謎は多いですね。

_ [アニメ] 真夜中のオカルト公務員

めずらしくもほっこりな回。

アステカの神を連れまわせば騒ぎになる、と。

_ [テレビ] 【四月一日さん家で踊ってみた】VMCでswitch踊ってみた

踊ってみた用に投稿されたものなのかな?

色々とクオリティー高いですよね。

_ [Vtuber] アズリム

なんかこのところ時々アズリムの動画を見直していたらなんかはまった。

この毒のある厨二系後輩少女に……。

いや、よくできてるんですよね。

こうして見直してみるとものすごくキャラが立ってたりする。

ふぁー。

_ [PC] boost とか

C++ の boost ライブラリーと格闘しています。

データ列の中からイテレーターを使ってデータを抽出しないといけないのですが、抽出元のオブジェクトとイタレーションするオブジェクトの対応をみつけられなくて頓挫していたり。

ちょっと適当書きますけどこんな感じ?

#include 

std::vector vec;
...(vecの定義)...
for(auto it=std::begin(vec);!it=std:end(vec);++it)
 {
    std::cout<<*it<<endl;
 }
}

BOOST_FOREACH にもトライしてるのですが、オブジェクト同士の連携がうまくいかない。

これでVECTOR のvec の中身を列挙できる、と。

vecに対してもメンバー関数begin()やend()が使えるみたいなので、それでこのイタレータを使って、個数が判明しないデータ構造から要素を取りだすことできるわけだ。

boodtの中にもFREACHが存在していて、例えばpolygonの演算をboostで行う場合に使われていたり。

#include <~>
 ~ 
 ~
namespace bg=boost::geometry;
typedef bg::model::d2::point_xy point;
typedef bg::model::polygon polygon;

int main() {
  polygon poly;
  // polyの設定
  polygon poly2;
  // poly2の設定
  std::vector out;
  bg::union_(bx, poly, out);
}

これでふたつのポリゴンの合成結果である、ポリンゴンのベクターであるoutが設定されるわけです。

ポリゴンは穴開きのものが作ることができるのですが、外側のポリゴンはouoter ringで、内側がinterior ringとなっているようです。ちゃんと確認できていないのですが、それぞれがベクターテンプレートになっているようなので、polugon の並びであるpolygonとして出力できそう 。

子供のpolygonがいない場合は単純にBOOST_FOREACHを使うのが便利なはず。

  std::vector<polygon> out;
  bg::union_(bx, poly, out);
  BOOST_FOREACH(polygon const& p,out)
    {
       for(auto it=out.begin();it !=out.end();++it)
          {
              std::cout<<bg::get(*it)<0><<","<<bg::get(*it)<1><<std::endl;
          }
    }
}

polygonの中に穴があいているとき、外側のポリンゴンとは逆向きのポリゴンがベクター形式で格納されるっぽいのです。でも上の式のFOREACHに設定するoutとかpなどがどのようなかたまりで何のオブジェクトになっているのかがよくわからないんですよね。

色々と読み解かないといけないや。

ふみーん。

半月前まではC++はおろかCだって少ししか使ったことなかってたはずだったのになぁ。

後輩に教えてるうちに変数に二つポインター記号がついているものの意味を考えてしまいましたよ。大雑把に言うと二次配列みたいなものなのですね。昔Cの配列をかじったあとでPerlを徹底してやったもので、Cライク言語の配列の構造の考え方がわかった気がしますよ。

つまりある配列要素があると、その配列要素が配列になっている、という展開のしかたをするようにして配列を読むので、Fortranと配列のインデックスが入れ違うというのはそこから来てるみたいです。Fortranは行列の演算式をコーディングする際に便利だから添え字つきの行列と引数の順番が同じになるんですよね。つまり $ A_{ij} = \sum_k B_{ik}C_{kj} $ みたいな感じです。

配列はそのまま使われますね。

 A(I,J)=0.0
 DO K=1,3
   A(I,J)=A(I,J)+B(I,K)*C(K,J)
 END DO 

みたいな感じです。

C だと a[]のそれぞれの成分がまた配列になっているので、{a[]}[]みたいになっているのですね。しかもインデックスは0からはじまる。

 a[j][i]=0;
 for(int k=0;k<3;k++){
   a[j][i]=a[j][i]+b[k][i]*c[j][k];
 }

これがまたどっかと難しくなったクラスについて考えなきゃいけないので、オブジェクトの構成メンバーとかをよく調べないと手も足も出ないのですね。

周囲にboostはおろかテンプレートも使ってる人がいないので情報収集が困難です。今から文法書を購入する余裕がないので、ネットの情報だけが頼りです。

でも色々な関連ある項目について調べて、それを組み合わせるしかないんだよあぁ‥‥‥。

がーーー。


【PR】ブログへ記事を投稿して報酬ゲット!アフィリエイトのA8.net