Max:程序绘制

max11

1. 左上角的例子:counter物件可以生成一组循环的值。依次点击第一个按钮可以依次生成一组0-9的循环值。counter第三个输入口为“赋值于下一次点击”,比如物件改变第一排第一个数字框的数字为5,可以在下一次点击的时候直接跳到5,而无论之前的数字是几,点击蓝色背景的按钮(发送bang信息)则可以将下一次点击的值恢复到零。counter物件最后一个输入口可以实时设定最大值。

2. counter的多引数应用:1个引数:设定最大值;2个引数:设定最小值和最大值;三个引数:设定方向(direction)、最小和最大值。

3. scale物件:将一组输入值的范围(引数前两位)映射到一组输出值范围(引数后两位)内。左列二例:输入值0-100并映射到输出值-1.0~1.0上,即:如输入值为0,则输出值为-1.0;输入值为100,输出值为1.0;输入值为50,输出值为0.0。如果输入值超越输入值范围,输出值也会按计算的增量相应增加。因此,输入150输出则为2.0,输入-100输出则为-3.0。这个物件的引数是用于决定转换的数学表达式。

4. 左列三例:点击第一个消息框,最下边的数字框将在1000毫秒(1毫秒=1/1000秒)内由0增加到目标值(100)。点击第二个消息框,起始值将在5000毫秒(5秒)后回到0。点击第三个消息框,数字将在2.5秒后由20上升到50。

5. 大家伙:

#1:使用了4个不同的counter物件,一个用于设定位置和大小,另外三个改变颜色。需要了解最左边的那个counter是最重要的,它从0数到767,共给我们768步。x/y轴的值则由%(一个数字除以另一个数字,整除后输出剩余的值,例如22%10=2)和/(一个数字除以另一个数字,输出结果)物件计算,将我们的lcd物件打碎为24×24的格子。注意看counter的两个输出,它们均生成了一组0-23的循环,%跑得快,/依metro的速率改变。这个值乘以10(获得左上角的像素位置)后加10(获得右下角的像素值)。这为我们的程序建立了一个可用来作画的以圆形填充的lcd方格界面。另外三个counter物件在三个不同的数值范围内循环,使我们得到了一个不断变色的调色板。第一个引数2强制counter从小值增加到最大值之后再减小到最小值,如此反复。这是在绘制时颜色缓慢改变的原因。这个引数(direction)的使用:0=增加,1=减小,2=增加后减小,如此反复。

#2:运用scale物件绘制基于正弦波计算的形状。counter’物件产生从0到最大值(由metro物件右侧的两个数字框内数字决定)的输出。它被scale物件界定于0.0~6.283185(2×π)之间,而后发送进入一个sin物件,计算出输入值的正弦值,产生一个在-1.0~1.0范围内变动的正弦波。这个值被送入另一个scale物件,映射进入一个整数范围0~319(lcd物件的大小范围)之内,这用于产生x轴的值。它隔壁与它同样的那堆方块儿用于产生y轴的值。这些数字随后被插入一组数列(list)(使用pack物件,使用prepend物件lineto它们)后被传送到lcd内。

#3:目前为止我们见过的最复杂的程序。它依靠lcd物件的空闲(idle)机制做一些程序绘制。当idle消息开启(通过idle 1消息)。lcd物件会输出你鼠标当前相对于lcd物件画布的位置。x/y坐标由lcd物件的第二个输出口输出为一组list。淡蓝色连接线将当前鼠标坐标送入unpack物件,这些值被送入我们的绘画代码,创造出一组值,绘制出两个能够跟随鼠标反应的圆形,并且能够对鼠标与它们的不同距离产生不同反应。开启最顶端的toggle盒子,然后用鼠标在lcd上转转,看看那俩球是如何反应的。

在这个程序内有非常重要的两步:第一,用line物件使得输出值的时间周期为1秒(1000毫秒),这使得产生的结果在不断插入的过程中有一种更有机的感觉。第二,我们运用cartopol(cartesian to polar) 物件使得鼠标的x/y轴(“Cartesian”)笛卡尔坐标值转化为一对基于距离/角(“Polar”)的极坐标值,这对在圆形范围内绘制内容很有帮助。一旦polar坐标被计算出来,它们将被限制符合于圆形绘制范围的大小,然后被用于一个复杂、多消息消息框的一部分,结果就是你看到的那两个球体。

程序底部的消息框发送4个有序的绘制命令到lcd物件。前两个用paintoval命令绘制固定位置(100 100 140 140 和 180 100 220 240)的两个背景圆形,后三个数字0 0 0设定它们的颜色为黑色。后两个用pack物件得到的值绘制出两个绿色(0 255 0)的“追随者”,四个值提供了“追随者”开始和结束的角度并由paintarc命令绘制出来。

6. 结论:运用一组输入值,然后依据你的需要scale它们,这是很多Max程序至关重要的步骤。用counter物件创造循环,用scale物件将输入值scale到输出值,并用line物件在不同的时间内插入数字。有时,我们也会运到一些基于三角学计算的物件。

本例内新物件:

count:计算收到的bang讯息,输出它。

scale:将一组输入值范围映射到一组输出值范围。

line:在一定时间内平滑输出一个值到另一个值。

sin:正弦功能。

cartopol:笛卡尔(Cartesian)坐标到极(Polar)坐标的转换。

相关知识:

1. 正弦:正弦是三角函数的一种。它的定义域是整个实数集,值域是[-1,1]。它是周期函数,其最小正周期为2π。在自变量为(4n+1)π/2〔n为整数〕时,该函数有极大值1;在自变量为(4n+3)π/2时,该函数有极小值-1。正弦函数是奇函数,其图像关于原点对称。

2. 笛卡尔坐标系:在數學裏,笛卡兒坐標系,也稱直角坐標系,是一種正交坐標系。二維的直角坐標系是由兩條相互垂直、0 點重合的數軸構成的。在平面內,任何一點的坐標 是根據數軸上 對應的點的坐標設定的。在平面內,任何一點與坐標的對應關係,類似於數軸上點與坐標的對應關係。

採用直角坐標,幾何形狀可以用代數公式明確的表達出來。幾何形狀的每一個點的直角坐標必須遵守這代數公式。例如,一個圓圈,半徑是 2 ,圓心位於直角坐標系的原點。圓圈可以用公式表達為

3. 极坐标系:在数学中,极坐标系是一个二维坐标系统。该坐标系统中的点由一个夹和一段相对中心——极点(相当于我们较为熟知的直角坐标系中的原点)的距离来表示。极坐标系的应用领域十分广泛,包括数学物理工程航海以及机器人领域。在两点间的关系用夹角和距离很容易表示时,极坐标系便显得尤为有用;而在平面直角坐标系中,这样的关系就只能使用三角函数来表示。对于很多类型的曲线,极坐标方程是最简单的表达形式,甚至对于某些曲线来说,只有极坐标方程能够表示。

Be Sociable, Share!

发表评论

电子邮件地址不会被公开。 必填项已用*标注