辛蒂JS公司

微小代码示例

在本节中,我们简要演示了不同的CindyScript编程技术。每个示例都提供了一个小任务和一个处理该任务的CindyScript实现。


重心

设置一个点D类到其他三个点的重心。根据条件更改其颜色。

图像

//平局中D.xy=(A+B+C)/3;D.color=如果(D.x>0,(1,1,0),(0,0,1))

代码是直接的。请注意,用于设置D类任务是为了D.xy公司.末尾的条件根据的位置返回颜色值D类.


选择和聚类

将上下分离x个-轴,并绘制两个簇。

图像

//抽中pts=所有点();以上=选择(pts,p,p.y>0);低于=pts——高于;segs=对(如上);drawall(segs,颜色->(0.6,0,0));segs=对(如下);drawall(segs,颜色->(0,0.6,0))

上面的点x个-轴通过使用选择具有适当条件的操作员。以下要点x个轴是通过使用设定的差值来计算的。可以使用计算集合中所有可能对的运算符。


凸壳的计算与绘制

计算图形中所有点的凸包。注意使用~›运算符处理数值不稳定性。

图像

//抽中pts=所有点();左侧(A,B):=选择(pts,p,area(A,B,p)~>0);(A,B)的右边:=选择(pts,p,面积(A,B,p)~<0);i边缘(A,B):=((A,B)的左边==[]%(A,B==[])的右边;分段=对(pts);hull=选择(segments,seg,isedge(seg1,seg2));拖网(船体);

这里的凸壳计算是根据一个非常好的几何原理进行的:凸壳中的一段在其一侧有所有其他点。这里有两个函数左边的的权利将线段的两侧分开的定义。基于此,一个谓词伊斯奇定义,该测试一对点是否形成凸包的边。(注意模糊比较的用法~‹0以避免数值不稳定)。最后,选择并绘制凸壳的所有边。


创建模拟时钟

创建一个显示小时、分钟和秒的时钟。为此,绘制端点具有适当名称的几个箭头,然后输入以下脚本。

//以timerstep为单位t=时间();p(x):=(sin(2*pi*x),cos(2*pi*x));B.xy=p(t_3/60)*4;C.xy=p(t_2/60)*5;D.xy=p((t1*60+t2)/(12*60))*3.5;应用(1..12,i,绘制(p(i/12)*5));应用(1..60,i,绘制(p(i/60)*5,尺寸->1));图文((3,5),t);

图像

这些点是由脚本绘制的。这个圆是用一个几何物体画的。

这个时钟利用了时间操作员可以访问计算机的系统时间。计算的方式是,第二只手跳跃,而另两只手似乎在连续移动。


最近点

标记最接近的点A类一个大绿点。

图像

//抽中pts=所有点();s=排序(pts,|#-A|);p=s_ 2;绘制(p,大小->20);

注意,我们必须使用脚本中第二个最近的点,因为A类最接近自身。另一个解决方案是删除A类排序前从列表中选择:

//抽中pts=所有点()--[A];s=排序(pts,|#-A|);p=s1;绘制(p,大小->20);

简单的装饰品

通过移动点绘制一个简单的装饰。笔划的颜色应该与点的颜色相似。

图像

//抽中所有(pts,p,p: “跟踪”=p:“跟踪”++[p.xy]);tr0=[[1,0],[0,1]];tr1=[[-1,0],[0,1]];tr2=[[-1,0],[0,-1]];tr3=[[1,0],[0,-1]];trs=[tr0,tr1,tr2,tr3];所有(trs,t,所有(pts,p,connect((p:“trace”)*t,color->p.color,size->2);););//初始化中pts=所有点();for all(pts,p,p:“trace”=[]);

观察每个点在关键变量中存储其自己的轨迹“跟踪”.这些变换是通过二维矩阵乘法进行的。通过改变矩阵的值(和数量),人们可以很容易地制作出更复杂的装饰品。


线性回归

计算并绘制所有点的线性回归线。标记对应于基本最小二乘近似值的平方。

图像

//抽中//最小平方线pts=所有点();m=应用(pts,(1,#.x));y=应用(pts,#.y);ma=转置(m)*m;mb=转置(m)*y;mainv=逆(ma);v=mainv*mb;f(x):=v_2*x+v_1;图(f(x));//画正方形平方(x,y1,y2):=(d=y2-y1;p=((x,y1),(x,y2),(x+d,y2);drawpoly(p,颜色->(1,0.5,0.5),α->0.4);连接(p,颜色->(.8,0,0)););for all(pts,sq(#.x,#.y,(f(#.x)));

该代码利用高级矩阵计算来找到线性回归线。计算遵循线性代数基础课程中给出的标准计算程序。通过几乎完全相同的代码,甚至可以通过一组基函数计算近似值(最小二乘)。

向日葵

从教程中创建一个很好的向日葵applet版本。

图像

//抽中n=圆形(100*|B,E|);d=0.01*(|d,F|/|d,C|-.5);ang=137.508°+天;重复(n,i,w=ang*i;r=平方(i)*.2;p=(sin(w),cos(w))*r;绘制(p,颜色->(1,0.8,0)););绘图文本((-5,-6),“n=”+n);绘图文本((0,-6),“w=”+180*ang/pi+“”);

此代码依赖于非常特定的角度ang=137.508°在向日葵的生长行为下产生致密的填充物。该示例还表明,稍微扰动该角度会立即导致非常显著的螺旋,其中填料不是各向同性的。


功能绘图仪

实现具有可自由输入的功能和可调整参数的功能绘图仪。

图像

//抽中//参数滑块a=K.x;b=长度x;c=M.x;d=N.x;绘图文本(K+(0.2,0.2),“a=”+a);绘图文本(L+(0.2,0.2),“b=”+b);绘图文本(M+(0.2,0.2),“c=”+c);绘图文本(N+(0.2,0.2),“d=”+d);//分析和绘图f(x):=解析(文本0.val);图(f(x),颜色->红色(0.6),大小->2);

该函数输入到名为“灰姑娘”的输入字段中文本0.直接解析此输入字段中的文本。参数取自几何绘制的滑块。


色彩混合

模拟三个灯泡(红色、绿色和蓝色)的加色混合。灯由几何点表示A类,B类C类.

图像

//抽中彩色图((1-|#,A|/4,1-|#,B|/4,1-|#,C|/4),(-5,-5),(5,5),像素->3)

这个调色器确实非常简单。它利用了一个事实,即可以直接计算RGB颜色向量的槽。这个彩色图command基本上完成了剩下的所有工作。


朱莉娅·塞茨

计算并绘制Julia集,这是一种众所周知的分形,由点表示的复数决定C类.

图像

//抽中g(z,c):=z^2+c;朱莉娅(z):=(iter=0;而(iter<100&| z |<2,z=g(z,复合物(C.xy));iter=iter+1;);1 iter/100;);彩色图(朱莉娅(复数(#)),A,B,启动次数->16,pxlres->1);

再次使用彩色图命令是执行此任务的最强大的方法。功能朱莉娅上面迭代计算每个像素的颜色。使用启动像素确保流畅的用户体验。


Swarm仿真

模拟一群鱼。每条鱼都应该试着和它的邻居朝同一个方向游,并试着游到邻居所在的大概位置。所有的鱼都应该避开一个点所造成的障碍U型.要尝试此操作,请创建一些体量并确保其中一个已标记U型或更改脚本中相应的行。还要在“水族馆”周围用保镖围起围栏。

图像

//抽中ms=所有质量()--[U];lim=0.5;应用(ms,m,近=选择(ms,p,|p-m|<4);平均值=总和(近,m,m.v)/长度(近);m.v=m.v+.2*(平均值);如果(|m.v|>lim,m.v=lim*m.v/|m.v|);//绘制连接应用(近,绘制(#,m,颜色->(0,0,0),alpha->0.2)););

这里所有的鱼(以及障碍物)都是由带正电荷的质量建模的。由此,他们互相推开。脚本对每个点的速度进行修正。这个非常简单的算法生成的行为非常丰富,看起来非常有说服力。