zoukankan      html  css  js  c++  java
  • 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"

  • 相关阅读:
    Qt 优雅的结束程序
    Qt QPainter实现按钮添加半透明图片
    Qt QTableModel联表显示
    C++ unique 里 类型为vector<vector<int>> 的比较函数
    用JavaScript实现的2048.
    Linux 脚本控制和计划任务
    Linux shell脚本分支循环函数笔记
    Linux shell脚本特殊符号笔记
    Linux shell脚本笔记
    Linux 内存磁盘管理命令笔记
  • 原文地址:https://www.cnblogs.com/euphoria/p/1382225.html
Copyright © 2011-2022 走看看