Houdini JoyOfVex 教程05
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相关推荐
- Houdini JoyOfVex 教程01
原英文系列教程地址:在这里 文档翻译教程:PB_zz 01 houdini 中的 vex 语言,是一种类似于c/c++的强类型语言,执行效率高,具体帮助文档位于houdini菜单栏help-Conte ...
- Houdini JoyOfVex 教程02
02 还是01中的话,本文有很多内容来自PB_zz翻译的文档,我有相当一部分其实属于二次创作. 我们在第一节教程里了解了变量,属性,赋值,很显然,第二节就需要运用他们了,而对于编程语言来说,将他们包装 ...
- Houdini JoyOfVex 教程06
06 Point wrangle vs prim wrangle(point wrangle节点与prim wrangle节点) 将颜色先变为全黑,然后让R红色值与点距离关联: float d = l ...
- Houdini JoyOfVex 教程04
04 Chramp(样条映射控制面板/斜坡控制/梯度控制) chramp应该是channel ramp的缩写,不知道该怎么翻译好- -,这里就译为样条控制了,或许叫斜坡控制好点?(PB_zz says ...
- Houdini JoyOfVex 教程03
03 这一节算是对第二节的补充应用 我们首先来回顾一段代码: float d= length(@P); d *= ch('v_scale'); d += @Time; @P.y = sin(d); 我 ...
- [译]Vulkan教程(05)Instance
[译]Vulkan教程(05)Instance Creating an instance 创建一个instance The very first thing you need to do is ini ...
- python中delete怎么用_python删除np.deletePython基础教程05 - 缩进和选择
缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这是C,不是Python! ...
- GStreamer播放教程05——色彩平衡
目标 亮度,对比度,色度和饱和度都是常见的视频调节参数,也是GStreamer里面设置色彩平衡的参数.本教程将展示: 如何发现可用的色彩平衡通道 如何改变它们 介绍 <GStreamer基础教程 ...
- CCS使用教程05:CCS8.0常用菜单
目录 01 CCS的介绍.下载与安装 1 CCS的介绍 2 下载 3 安装 02 创建一个CCS工程 1 工作空间 2 创建一个新的CCS工程 3 编译与生成 03 工程导入 1 ...
最新文章
- linux下Vi编辑器命令大全
- shell脚本参数$10问题
- OpenStack实践(一):Ubuntu16.04下DevStack方式搭建p版OpenStack
- 顶岗实习周记java方向_JAVA软件开发——顶岗实习周记25篇.doc
- FluentValidation
- win10游戏版如何安装 Windows10安装游戏版的步骤方法
- 《linux核心应用命令速查》连载四:at:定时运行命令
- iOS底层探索之多线程(十六)——锁分析(NSLock、NSCondtion、NSRecursiveLock、NSCondition)
- 正则表达式-2-正则表达式实战1
- 常用图像处理相关图像数据库
- java常用类objet,Java基础-常用API-Object类
- mysql 求平方_如何用MySQL求一个范围内的完全平方数
- centos搭建samba服务
- RO、RW和ZI数据解析
- vue 路由 不同动画 翻页 插件
- ps进行透视变换(扭曲变换)
- ACM常用的解题技巧:尺取法
- python柱形图颜色_pyplot/matplotlib条形图,填充颜色取决于值
- 人工智能时代特征初步显现,主要体现在哪几个方面?
- uva12657 移动盒子
热门文章
- 研发部技术方向-物联网平台、大数据、人工智能
- 秋招末班车没赶上!只能走社招了么?
- 映泰主板BIOS刷入slic并激活
- Nginx配置OPTIONS方法请求直接返回204状态
- 微信小程序将前端项目html转为wxml在线转化工具
- D触发器中PRN、CLRN区别以及复位电平选择
- CSDN开发者周刊第 20 期:Google 下一代操作系统 Fuchsia 源码正式公开;AI 消除马赛克 效果惊人
- 机器学习入门基本使用工具(保姆式教学):matplotlib,numpy,pandas这一篇就够了
- redis的cluster集群模式
- 强迫对流换热系数测定所求实验公式的应用条件和范围式什么