05

Modulo(取模运算)

每个小学生都明白±*/,但通常没学过编程的人不太用得到%。%是取模计算。相信你在小学就学过除法,除法会得到一个余数。类似的,取模计算的值就是得到一个模数。

你问一个10岁小孩5除以2等于多少,他们都会告诉你结果等于2,余1。所以咯,5%2 = 1。

你可能会问?那么取模计算有毛用呢?它当然相当有用,因为它能制造循环。比如说你用@ptnum/5,你会依次得到0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3…

@P.y = @ptnum % 5;

译者注:取模运算和求余运算好像有一点差别,自行查找相关资料,了解一下。不过基本都是用在正数的计算上,问题不大。

取模计算对于小数来说也是能用的,例如下面的代码,你能得到一个直角三角形锯齿状(sawtooth)的数值排列结果(译者注:点击时间轴播放按钮,观察grid颜色变化,以及spreadsheet面板中Cd[r]值的变化。模数依次循环变化.

@Cd.r = @Time % 0.7;

很多效果都涉及到设置循环,取模运算给你提供了一种方便的方式来达到某种循环效果。
Making smooth things stepped via quantising(让平滑效果转变为步幅阶梯性变化)
首先写下前几节课的旧代码,让点的P.y值随其离中心距离的远近而变化:

float d = length(@P);
d *= ch('scale');
@P.y = d;

如前几节课的看到的效果一样,平面呈现了一种平滑的弯曲变化。想象一下,它的数值变化是连续的,类似:
1.0, 1.1, 1.2, 1.3, 1.4 … 1.8, 1.9, 2.0, 2.1, 2.2, 2.3 …

但如果我们移除小数点后面的部分呢:
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3

这样的话,数值图像仿佛像楼梯似的(steppy)变化。但如果原始数据非常小呢,例如从0.001慢慢增长到0.003?如果你像前面一样,只是简单粗暴地移除小数点后的数,那它们就全变成0咯,这可一点都不好玩。类似的,如果数很大呢,比如1000~4000?移除小数就基本显现不出啥变化来。

这可咋整呢?别担心,交给我吧!既然数值太大或者太小,移除小数起不到作用,那我们将该数值先乘以/除以一个数,他就变大/变小了,小数点也随之左移或右移,此时我们移除小数,之后再将该数值除以/乘以一个数,这不是就OK了吗。另外,移除小数用到的函数是trunc,你同样可以在之前提到的网站查询:

译者注:例如一个数0.03567,如果直接移除小数点后的数则变为0。而我们将其乘以1000,得到35.67,移除小数得35,再除以1000,得0.035,这样就OK了。用同样的方法,0.03555, 0.03875将变为0.035,0.038,这样就会呈现那种阶梯状的数值变化了。

float d = length(@P);
d *= ch('scale');
float f = ch('factor');
d /= f;
d = trunc(d);
d *= f;
@P.y = d;

这种丢失精确度(precision)的过程叫做量化(quantising)。
Faking trunc with a chramp(用样条控制来伪造截取整数函数的效果)

将样条调为阶梯状就能做出类似效果。如上节课所讲一样,你最好给出2个滑竿控制(例如pre_scale和post_scale),一个用来将传入chramp的变量x缩放到0~1的范围(grid默认10个单位长,所以你的pre_scale可以调为0.1),另一个在chramp计算过后,将其得到的y值从0-1缩放回你想要的值(比如将post_scale调为10,和之前平面升高的最高点高度对应)。

译者注:可查看spreadsheet的P[y]值观察一下变化。

float d = length(@P);
d *= ch('pre_scale');  // 也可使用fit函数,例如d = fit(d,  0, 7.07107,  0, 1);
d = chramp('my_stepped_ramp', d);
d *= ch('post_scale');  // 若用fit,则同理倒回去,d = fit(d,  0,1,  0, 7.07107);
@P.y = d;

Houdini JoyOfVex 教程05相关推荐

  1. Houdini JoyOfVex 教程01

    原英文系列教程地址:在这里 文档翻译教程:PB_zz 01 houdini 中的 vex 语言,是一种类似于c/c++的强类型语言,执行效率高,具体帮助文档位于houdini菜单栏help-Conte ...

  2. Houdini JoyOfVex 教程02

    02 还是01中的话,本文有很多内容来自PB_zz翻译的文档,我有相当一部分其实属于二次创作. 我们在第一节教程里了解了变量,属性,赋值,很显然,第二节就需要运用他们了,而对于编程语言来说,将他们包装 ...

  3. Houdini JoyOfVex 教程06

    06 Point wrangle vs prim wrangle(point wrangle节点与prim wrangle节点) 将颜色先变为全黑,然后让R红色值与点距离关联: float d = l ...

  4. Houdini JoyOfVex 教程04

    04 Chramp(样条映射控制面板/斜坡控制/梯度控制) chramp应该是channel ramp的缩写,不知道该怎么翻译好- -,这里就译为样条控制了,或许叫斜坡控制好点?(PB_zz says ...

  5. Houdini JoyOfVex 教程03

    03 这一节算是对第二节的补充应用 我们首先来回顾一段代码: float d= length(@P); d *= ch('v_scale'); d += @Time; @P.y = sin(d); 我 ...

  6. [译]Vulkan教程(05)Instance

    [译]Vulkan教程(05)Instance Creating an instance 创建一个instance The very first thing you need to do is ini ...

  7. python中delete怎么用_python删除np.deletePython基础教程05 - 缩进和选择

    缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这是C,不是Python! ...

  8. GStreamer播放教程05——色彩平衡

    目标 亮度,对比度,色度和饱和度都是常见的视频调节参数,也是GStreamer里面设置色彩平衡的参数.本教程将展示: 如何发现可用的色彩平衡通道 如何改变它们 介绍 <GStreamer基础教程 ...

  9. CCS使用教程05:CCS8.0常用菜单

    目录 01  CCS的介绍.下载与安装 1  CCS的介绍 2  下载 3  安装 02  创建一个CCS工程 1  工作空间 2  创建一个新的CCS工程 3  编译与生成 03  工程导入 1  ...

最新文章

  1. linux下Vi编辑器命令大全
  2. shell脚本参数$10问题
  3. OpenStack实践(一):Ubuntu16.04下DevStack方式搭建p版OpenStack
  4. 顶岗实习周记java方向_JAVA软件开发——顶岗实习周记25篇.doc
  5. FluentValidation
  6. win10游戏版如何安装 Windows10安装游戏版的步骤方法
  7. 《linux核心应用命令速查》连载四:at:定时运行命令
  8. iOS底层探索之多线程(十六)——锁分析(NSLock、NSCondtion、NSRecursiveLock、NSCondition)
  9. 正则表达式-2-正则表达式实战1
  10. 常用图像处理相关图像数据库
  11. java常用类objet,Java基础-常用API-Object类
  12. mysql 求平方_如何用MySQL求一个范围内的完全平方数
  13. centos搭建samba服务
  14. RO、RW和ZI数据解析
  15. vue 路由 不同动画 翻页 插件
  16. ps进行透视变换(扭曲变换)
  17. ACM常用的解题技巧:尺取法
  18. python柱形图颜色_pyplot/matplotlib条形图,填充颜色取决于值
  19. 人工智能时代特征初步显现,主要体现在哪几个方面?
  20. uva12657 移动盒子

热门文章

  1. 研发部技术方向-物联网平台、大数据、人工智能
  2. 秋招末班车没赶上!只能走社招了么?
  3. 映泰主板BIOS刷入slic并激活
  4. Nginx配置OPTIONS方法请求直接返回204状态
  5. 微信小程序将前端项目html转为wxml在线转化工具
  6. D触发器中PRN、CLRN区别以及复位电平选择
  7. CSDN开发者周刊第 20 期:Google 下一代操作系统 Fuchsia 源码正式公开;AI 消除马赛克 效果惊人
  8. 机器学习入门基本使用工具(保姆式教学):matplotlib,numpy,pandas这一篇就够了
  9. redis的cluster集群模式
  10. 强迫对流换热系数测定所求实验公式的应用条件和范围式什么