スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

簡単な三次元プロット

OpenGL上で格子点をpixelで描画したとき、格子間の色を線形補間するプログラムを描くことにしたのだが、二次元の重み付け行列を描画したかったのでRで行列を三次元プロットした。

> x <- seq(0,49,length=50)
> y<-x
> f<-function(x,y){r<-x/49*y/49}
> z <- outer(x, y, f)
> persp(x, y, z,theta = 260,phi = 25,expand = 0.8,shade=.01,col = "lightblue")


interpolation01_convert_20111227231406.png



ところで、OpenGLでバグらしき現象を発見した。重み付け行列をglobalで宣言した後、main()関数内で行列に値を入れて行ったのだが(上記Rのプロットに従う)、その値をOpenGLは時に破るらしく、違った値で演算してしまう場合があった。print()関数でこの問題の行列の値をterminal上で表示させても正しい値は表示されるのだが、内部的に行っている演算は異なるもので、描画された結果は意図したものとは異なってくる。使う関数内で、その場で行列の内容をmain関数内と同様に逐一計算すると回避できる、という、まぁOpenGLの不備だろうという現象だ。今回の自分の場合、描画領域中に周期的に白だの黒だのの線が入り込んでしまうという状態になるもので、昨日このバグに苦しめられ、「真に正しいプログラム文書から間違いを探索し続ける」という極めて非生産的でendlessなつらい活動を深夜3時までしていた。
思い返すと、イベントXのときもこのバグに遭遇していて、同じような不毛なバグ取りを試みていた(バグが見つかるわけ無いですプログラム正しいんだから!)。これで××遅れそうになったんだよな。今後注意しなければならない。
スポンサーサイト

コメントの投稿


非公開コメント

コメント

Profile

zoa

Author:zoa
Metropolis (1927)

Calendar
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
Labels
Admin
Previous Posts
Recent Comments
Recent Trackback
Archive
このページのトップへ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。