形状
除了基本的直线、多边形和圆绘制操作外,CindyScript还提供了将这些对象组合成更复杂的对象(称为形状)的可能性。形状不直接可见,但可以用于填充、绘制轮廓或剪裁。它们可以使用并集、交集或集差等逻辑运算进行组合。我们首先列出基本运算符,然后在更详细的示例中解释它们的用法。
形状基本体
圆形:圆圈(点›,半径›)
描述:此运算符创建给定半径›
围绕给定的点›
.
多边形形状:多边形(list›)
描述:此操作符创建由中给定位置列表定义的多边形列表›
.
半平面形状:半平面(б线›,б点›)
描述:此操作符创建半平面形状。半平面由其支撑线定义线路›
还有一点点›
包含在半平面中,它决定半平面位于支撑线的哪一侧。线路›
可以是同质坐标的三维矢量,也可以是对直线对象的引用。
屏幕的形状:屏幕()
描述:此操作符创建一个矩形,其大小足以覆盖所有活动的绘图曲面。
组合形状
可以使用三个逻辑运算符组合基本图形以形成新图形。
形状的并集:形状1›++形状2›
创建两个形状的并集。它的内部是任何一个点内的任何一个›形状1›或形状2›。
形状的交集:形状1›~~形状2›
创建两个形状的交点。它的内部是位于形状1›和形状2›内的任意点。
形状差异:形状1›--形状2›
创建两个形状的(不对称)差异。它的内部是位于形状1›内部的任何点,而外部是形状2›。
使用形状
形状可以用于填充、绘制轮廓和剪裁。
填充形状:填充(形状›)
描述:此运算符使用指定的颜色填充形状。
修改人:此运算符支持以下修饰符:
修饰符 |
参数 |
效果 |
颜色 |
[领域1›,领域2›,行业3›] |
将填充颜色设置为RGB值 |
阿尔法 |
真正的› |
将不透明度设置为值阿尔法› |
绘制形状:绘制(形状›)
描述:此操作符绘制形状的轮廓。
修改人:该操作符是对常用draw操作符的进一步多态扩展,并支持相同的修饰符。
设置clippath:夹子(形状›)
描述:此操作符将剪辑路径设置为给定形状。所有后续的绘制操作都将根据此剪裁路径进行剪裁。剪辑路径被推送到外观堆栈上,因此可以通过以下语句再次删除它grestore()
或格雷塞()
.
示例
以下示例说明了形状的使用。下面的代码定义了三种不同的形状,一种是二次型,另一种是圆形。然后使用逻辑运算将它们组合成一个更复杂的形状。填充并勾勒出复杂形状。原始形状由较细的线条勾勒出来。
形状1=圆(E,4);形状2=圆(F,4);形状3=多边形([A、B、C、D]);颜色((0,0,0));形状=形状1++形状2++形状3;填充(形状、颜色->(1,0.8,0));绘制(形状、大小->3);绘制(形状1);绘制(形状2);绘制(形状3);
生成的图像显示为下面的第一张图片。其他三个图像是使用形状的其他组合创建的。
|
|
形状1++形状2++形状3 |
形状1~~形状2~~形状3 |
|
|
形状1++形状2--形状3 |
形状1++形状2~~形状3 |
下面的代码片段演示了形状作为剪切路径的用法。首先,四个圆及其并集被定义为一个形状。然后将此形状用作另一个图形的剪切路径(围绕点的同心圆E类).
r=3;形状=圆(A,r)++圆(B,r)++圆(C,r)++圆(D,r);夹子(形状);重复(60,i,牵引圈(E,i/2,颜色->(0,.6,0),尺寸->3););灰色();绘制(形状、颜色->(1,1,1)、大小->2);
形状可以成为相当复杂的对象,如以下迭代示例所示。这里可能需要提醒一句:形状越复杂,消耗的计算资源就越多。使用过于复杂的形状可以大大减缓灰姑娘的速度。
a=复合物(a);b=复合物(b);z=复合物(C);形状=圆((0,0),0);重复(50,形状=形状++圆(高斯(a),|a-b|);a=a*z;b=b*z;);填充(形状、颜色->(1,0.7,0));绘制(形状、颜色->(0,0,0)、大小->2);