天天看點

Mathematica練習

這幾天由于數學學習的原因,一直在擺弄Mathematica(v7).但思路一直往RayTracing上飄,我有 用Mathematica做RayTracing的 動機.簡要記錄一下.

過程:

1.生成螢幕坐标

2.每個螢幕坐标->World Space裡面的Ray

3.Ray->Intersection->Color

4.将螢幕坐标映射(Map)到Color

5.輸出映射之後的螢幕坐标

這裡我隻做第1,4,5三步

1.生成螢幕坐标:

Table[Table[List[x, y], {x, 0, 255}], {y, 0, 255}]

這裡常數255就是長和寬.利用了類似于Python中的那種List Comprehensions技術.

4.映射螢幕坐标:

Map[If[First[#] + Last[#] > 255, List[255, 0, 0], List[First[#] + Last[#], 0, 0]] &, Table[Table[List[x, y], {x, 0, 255}], {y, 0, 255}], {-2}]

藍色部分就是用來映射的匿名函式,紫色部分就是生成螢幕坐标.都不甚稀奇.

重點是紅色部分:它用來把映射應用于倒數第2層List.舉例:

Map[f, {{{0, 0}, {1, 0}}, {{0, 1}, {1, 1}}}, {-2}]

輸出:

{{f[{0, 0}], f[{1, 0}]}, {f[{0, 1}], f[{1, 1}]}}

這樣才能保證那個匿名函式正常工作,并且保證映射之後的Table依然是原先的維數(友善一會輸出Color)

5.輸出映射之後的螢幕坐标:

Image[Map[ If[First[#] + Last[#] > 255, List[255, 0, 0], List[First[#] + Last[#], 0, 0]] &, Table[Table[List[x, y], {x, 0, 255}], {y, 0, 255}], {-2}], "Byte"]

藍色部分就是第4步的重複.注意使用"Byte"

轉載于:https://www.cnblogs.com/euphoria/archive/2009/02/02/1382225.html