boostのublasのvector
boost::numeric::ublas::vectorのouter_prod(a, b)って,aを縦ベクトルbを横ベクトルとした積で,返り値は行列なのね.cross_prodは自分で書かないといけない模様.
uBLASがレイトレで使えるかどうか,つまりExpression Templateが有効か否か検証したい.
BVH-Median
BVH-Medianは三角面AABBの中心(重心)について、xについてソートし真ん中で分割→yについてソート(ry→zにつ(ryって構築する。実装次第で各要素について一度のソートで空間分割できるとおもうが…
あと、木構造だけど、ノード毎にメモリ動的確保はしない方がいいと思う。
iPhoneしかネットが使えないので図が書きにくい。
空間構造覚え書き
BVH-medianだとシーンの中央付近にAABBが多く重なってる部分があって交差判定が遅くなる部分がある気がする。
BVH-SHAなんてものがあるらしいが、あとで調べる。あとSIMDを使うQBVHも。
Oqtreeは子ノードのAABBにすっぽり入る分だけ面を子ノードに格納してあとは親ノードに格納する方法と、面がAABBと交差する全てのノードに格納する方法があるけど、前者は実装して見たけど余り速くならなかったし、後者はAABBと面の交差判定が面倒。一様グリッドを実装するにもAABBと面の交差判定は必要なので、あとで調べる。
あと、複数のノードに同じ面が格納されるような空間構造で同じ面と同じレイの交差判定が何度もされない様にメイルボックス法ってのがあるらしい。名前からだいたい想像はつくがあとで調べる。
あとで調べるばっかりだ。
method_missing
railsのARとかでこんな感じのコードを開くことがある.
class Entry < ActiveRecord::Base end entry = Entry.new entry.name = "name" entry.bio = "bio" entry.save
ここで疑問なのがnameとbioメソッド.どこで定義されているか検討もつかない.調べた結果.Objectのmethod_missingというのを使っているらしい.
class Object
ということで実験.こんな感じのクラスを書く.
class Test def method_missing(name, *args) puts "#{name},#{args}" end end
irbから実行
t = Test.new t.hoge(12) #name=>hoge,args=>[12] t.huga #name=>hoge,args=>[] t.foo("str1", "str2") #name=>foo,args=>["str1", "str2"]
(問題点あり)Chromeでgoogle web履歴を使う方法
まずはPageRankのアドオンをインストール.
エラー - Chrome ウェブストア
次にgoogle web履歴を有効にする.Google アカウント
WEB履歴を有効にするとPageRankのAPIを呼び出したらWEB履歴に保存してるようです.
現状,拡張機能がAPIを呼び出すとき'http://'を省略してるようなので保存されてる履歴がおかしくなっていて,全文検索ができません.
requireとload
irbで変更したプログラムをrequireしなおすのに毎度irbを再起動するのが面倒なので調べたら"load"というぴったりなのがあった.
module Kernel
[require と load の違いについて]
require は同じファイルは一度だけしかロードしませんが、 load は無条件にロードします。また、require は拡張子 .rb や .so を自動的に補完しますが、load は行いません。 require はライブラリのロード、load は設定ファイルの 読み込みなどに使うのが典型的な用途です。
確かめたところ,2回目以降の"load"で反映されるのは新規の部分と変更された部分だけで,削除された部分は反映されないようだ.