来源:Processing: A Programming Handbook for Visual Designers and Artists
章节:3-”Shape 1 Coordinates,Primitives” Page22-35
进度:page22-30 (Part a)
作者:Casey Reas,Ben Fry
版权:MIT Press
翻译:鲸男(whaleforest).2007/11/05-11/22
发表:www.imlab.cn/forum与http://imlab.cn/whale/与http://www.douban.com/group/processing/
说明:翻译用于Processing中文用户的学习交流与推广,如有侵权请告知我将尽快删除(whaleforest@gmail.com),转载请包括此信息。期待大家指正错误及一起翻译。
P22
P23
3-Shape 1 座标,基础图形
本章节介绍Processing中视觉窗口坐标系统及各种平面图形元素。
语法介绍:
size(), point(), line(), triangle(), quad(), rect(), ellipse(), bezier()
background(), fill(), stroke(), noFill(), noStroke()
strokeWeight(), strokeCap(), strokeJoin()
smooth(), noSmooth(), ellipseMode(), rectMode()
图形每个节点都需要数字定位让使用代码绘制图形显得麻烦重重。用铅笔或者鼠标绘画时有足够的时间考虑起笔落笔的位置,转而使用代码虽然和在纸上绘制图形非常不同,也并不意味着代码绘图的思路有多么不好理解。
坐标系统
工欲善其事,必先利其器.
在纸上画画可以根据需要选择不同的工具和纸张,例如,画速写用报纸和炭条,画素描用光滑的纸张和适合的铅笔。与此相对应,在电脑上绘画首先就要考虑屏幕尺寸和背景颜色。
电脑屏幕是由无数微小的像素(pixel)组成的点阵集合,电脑屏幕有多种尺寸,在我们的研究室有三种不同尺寸的电脑显示器,它们由不同数量的像素构成。笔记本电脑1,764,000像素(宽1680 x 高1050),平板电脑1,310,720像素(宽1280 x 高1024),旧款显示器786,432像素(宽1024 x 高768)。百万像素的数量听起来很吓人,可与A4开本的纸比起来实在不算大。印刷时的精度可以高达每英寸1000点,而电脑通常设定为每英寸100点,但电脑绘图可以反复操作的好处纸张根本做不到。
Processing程序能够控制屏幕上的任一像素,当你点击运行按钮( Run button)后,一个视觉窗口弹出并允许内存在窗口内绘制图形,当然这个视觉窗口可以设定的比屏幕还大,但通常情况下最好比屏幕小或刚好合适。
P24
使用size()函数设定视觉窗口的尺寸
size(width,height)
size()函数有两个参数,第一个设置视觉窗口的宽度(width),第二个设置高度(height)
|
|
|
|
//绘制一个宽度为120像素
//高度为200像素的视觉窗口
size(120,200);
|
2-01 |
|
|
//绘制一个宽度为320像素
//高度为240像素的视觉窗口
size(320,240);
|
2-02 |
|
|
//绘制一个宽度为200像素
//高度为200像素的视觉窗口
size(200,200);
|
2-03 |
定位屏幕上一个位置需要x坐标与y坐标。x轴坐标定位由原点起横方向的位置,y轴坐标定位由原点起竖方向的位置。在Processing中,坐标原点为视觉窗口的左上角,坐标值向右,向下时增大。左边图形演示坐标系统,右边图形中展示网格中不同位置的坐标。
原点的坐标是(0,0)。坐标(50,50)代表x轴坐标为50,y轴坐标也为50。坐标(20,60)代表x轴坐标为20,y轴坐标也为60。如果设定视觉窗口大小为100像素宽100像素高,坐标(0,0)位置在左上角顶端,坐标(99,0)位置在右上角顶端,坐标(0,99)位置在左下角底端,坐标(99,99)位置在右下角底端。
基础图形
我们可以使用point()函数来绘制点这个最基本的视觉元素
本函数有两个参数:第一个定位x轴坐标,第二个定位y轴坐标。和其它元素不同的是,点是单个像素的度量。
|
|
|
//这些点的x,y轴数值相等
//线从左上角
//到右下角
point(20,20);
point(30,30);
point(40,40);
point(50,50);
point(60,60);
|
2-04 |
|
|
|
//这些点的y轴数值都一样
//从顶端到它们的距离
//也相同
point(50, 30);
point(55, 30);
point(60, 30);
point(65, 30);
point(70, 30);
|
2-05 |
|
|
|
//这些点的x轴数值都一样
//从左边到它们的距离
//也相同
point(70, 50);
point(70, 55);
point(70, 60);
point(70, 65);
point(70, 70);
|
2-06 |
|
|
|
// 一个点紧挨一个点
// 就组成了一条线段
point(50, 50);
point(50, 51);
point(50, 52);
point(50, 53);
point(50, 54);
point(50, 55);
point(50, 56);
point(50, 57);
point(50, 58);
point(50, 59);
|
2-07 |
|
|
|
/// 当点的位置超过了视觉窗口显示范围
// 不会导致运行错误
// 但我们会看不到这些点
point(-500, 100);
point(400, -600);
point(140, 2500);
point(2500, 100);
|
2-08 |
P27
除了画一排点来组成线段外,使用line()函数可以更轻松画出线段,它有四个参数,每两个参数定位一个点。
前两个参数设定线段起点,后两个设置线段终点,它们共同构建了一条线段。
|
|
|
// y轴坐标相同的情况下
// 线段是条横线
line(10, 30, 90, 30);
line(10, 40, 90, 40);
line(10, 50, 90, 50);
|
2-09 |
|
|
|
// x轴坐标相同的情况下
// 线段是条竖线
line(40, 10, 40, 90);
line(50, 10, 50, 90);
line(60, 10, 60, 90);
|
2-10 |
|
|
|
// 当四个参数都不一样
// 就是乱七八糟的线
line(25, 90, 80, 60);
line(50, 12, 42, 90);
line(45, 30, 18, 36);
|
2-11 |
|
|
|
// 当两条线段中有一个点坐标相同时意味着它们相交
line(15, 20, 5, 80);
line(90, 65, 5, 80);
triangle()函数用来绘制三角形(triangle)。它有6个参数,每两个参数定位一个点:
|
2-12 |
|
|
triangle(x1,y1,x2,y2,x3,y3)
|
|
前两个参数定位第一个点,中间两个定位第二个点,最后两个定位第三个点。当连接三条线段时可以构成一个空心三角形,但用triangle()函数绘制的三角形中有颜色填充。改变triangle()函数中的参数可以得到不同大小和形状的三角形。
|
|
|
triangle(60, 10, 25, 60, 75, 65); // 填充三角形
line(60, 30, 25, 80); // 空心三角形的一边
line(25, 80, 75, 85); // 空心三角形的一边
line(75, 85, 60, 30); // 空心三角形的一边
|
2-13 |
P28
几何图形
Processing中用来绘制图形的函数有七种,以上图片展示了它们的初始形态,当然,代码2-04到2-22也演示了它们的使用方法。
P29
|
|
|
triangle(55, 9, 110, 100, 85, 100);
triangle(55, 9, 85, 100, 75, 100);
triangle(-1, 46, 16, 34, -7, 100);
triangle(16, 34, -7, 100, 40, 100);
|
2-14 |
quad()函数用来绘制四边形,它有八个参数,每两个参数定位一个点。
|
|
quad(x1,y1,x2,y2,x3,y4,x4,y4)
|
|
适当改变这些参数可以得到长方形,正方形,平行四边形和不规则四边形。
|
|
|
quad(38, 31, 86, 20, 69, 63, 30, 76);
|
2-15 |
|
|
|
quad(20, 20, 20, 70, 60, 90, 60, 40);
quad(20, 20, 70, -20, 110, 0, 60, 40);
|
2-16 |
绘制长方形和圆形的方法和之前介绍的有所不同,函数的四个参数不仅用来定位位置,还要设置图形尺寸。rect()函数用来绘制长方形:
前两个参数定位长方形左上角的位置,第三个参数设置宽度,第四个参数设置高度。下面绘制宽高相同的正方形。
|
|
|
rect(15, 15, 40, 40); // 大正方形
rect(55, 55, 25, 25); //小正方形
|
2-17 |
|
|
|
rect(0, 0, 90, 50);
rect(5, 50, 75, 4);
rect(24, 54, 6, 6);
rect(64, 54, 6, 6);
rect(20, 60, 75, 10);
rect(10, 70, 80, 2);
|
2-18 |
P30
ellipse()函数用来绘制椭圆形:
|
|
ellipse(x,y,width,height)
|
|
前两个参数定位椭圆形的圆心位置,第三个参数设置宽度,第四个参数设置高度。下面绘制宽高相同的圆形。
|
|
|
ellipse(40, 40, 60, 60); // 大圆
ellipse(75, 75, 32, 32); // 小圆
|
2-19 |
|
|
|
ellipse(35, 0, 120, 120);
ellipse(38, 62, 6, 6);
ellipse(40, 100, 70, 70);
|
2-20 |
bezier()函数用来绘制曲线。绘制贝塞尔曲线需要设定锚点和操纵点,首先由锚点确定曲线的起始位置,再由操纵点决定曲线的形态。
|
|
bezier(x1,y1,cx1,cy1,cx2,cy2,x2,y2)
|
|
此函数使用八个参数位定四个点,第一个点和第四个点定位曲线的起始,第二,三个点决定曲线的形态,我们可以想像下在Adobe Illustrator中绘制贝塞尔曲线时的情形,有两个操纵杆从曲线两端伸出。
|
|
|
bezier(32, 20, 80, 5, 80, 75, 30, 75);
// 绘制模拟操纵杆
line(32, 20, 80, 5);
ellipse(80, 5, 4, 4);
line(80, 75, 30, 75);
ellipse(80, 75, 4, 4);
|
2-21 |
|
|
|
bezier(85, 20, 40, 10, 60, 90, 15, 80);
// 绘制模拟操纵杆
line(85, 20, 40, 10);
ellipse(40, 10, 4, 4);
line(60, 90, 15, 80);
ellipse(60, 90, 4, 4);
|
2-22 |
//Part a is over