日更第11期-2015-3-27-processing教程-API篇-第一讲-map(),Table,loadTable(),norm(),lerp()

hI!!今天上线发现我多了一个粉丝!!哇,好高兴!

不过我昨天食言了,没有继续日更......希望不会掉粉。。。。。

不过那是有原因的,我昨天一直在找数据,终于今天给整理好了,我打算这个周末整一整。然后就可以出真正厉害的教程啦!!

我先说一下我接下来会出的教程,然后说说今天发的这个到底是什么。

 

接下来:

1,美国失业数据可视化

2,地图数据可视化案例教学(案例来自processing教学书visualizing data)

3,中国高考分地域分析

4,API教程

 

然后说说今天这是干啥。

简单来说,就是读书笔记一样的东西。我在阅读visualizaing data这本书的例子(其实是processing里附带的)时,发现

作者用了一下我完全没用过的函数,就是map,norm,lerp等等,这些是一些很好用的数学函数——之前都是靠自己傻算......

然后我参考着reference基本搞懂了,又自己试验了一下,就翻译成中文收拾了起来。

 

不过如果真是想看api文档,我并不建议直接使用我的这个:一来,我这只是初稿,精华版才比较有意义,现在只是照搬而已

;而来,只是翻译的话,以及有人做了——我这个API文档其实是为了我的教程同步出的;比如上次processing的第一个例子,

里面就用了map,如果不懂怎么回事就可以参考我的这个文档。

 

另外我也发现了一个人的个人网站,上面有很多已经翻译好了的API,可以去看一看:

http://hiprocessing.net/

不过这个网站也有一些坏的地方——第一,假装是官方的processing中文站,还提供下载;

第二,翻译水平有限,而且还不配图(怎么感觉是在说我自己.....T_T)

 

还有一些适合学习processing的网站,我下次再说。

大家先看着啊。

 

001
-------------------------------------------------------------------------------------------------------------
map()
-------------------------------------------------------------------------------------------------------------
案例

size(200, 200);
float value = 25;
float m = map(value, 0, 100, 0, width);
ellipse(m, 200, 10, 10);
void setup() {
size(200, 200);
noStroke();
}

-------------

float value = 110;
float m = map(value, 0, 100, -20, -10);
println(m); // Prints "-9.0"

-------------

void setup() {
size(200, 200);
noStroke();
}

void draw() {
background(204);
float x1 = map(mouseX, 0, width, 50, 150);
ellipse(x1, 75, 50, 50);
float x2 = map(mouseX, 0, width, 0, 200);
ellipse(x2, 125, 50, 50);
}

-------------------------------------------------------------------------------------------------------------
描述

将一个数字从一个范围映射到另外一个范围的函数。

在上面的第一个例子中,25这个数从0到100这个范围转换到了0到width(屏幕宽度:200)的范围。

而如第二个例子所示,超出原指定范围的数字,不会被最大值最小值所限制住,这是因为越界的值是很常见并且相当有用的。

-------------------------------------------------------------------------------------------------------------
语法

map(value,start1,stop1,start2,stop2)

-------------------------------------------------------------------------------------------------------------
参数

value float: 将要被转换的数值
start1 float: 当前范围的下限
stop1 float: 当前范围的上限
start2 float: 目标范围的下限
stop2 float: 目标范围的上限
-------------------------------------------------------------------------------------------------------------
返回值

float

-------------------------------------------------------------------------------------------------------------
相关

norm()
lerp()

-------------------------------------------------------------------------------------------------------------


002
-------------------------------------------------------------------------------------------------------------
Table
-------------------------------------------------------------------------------------------------------------
案例


Table table;

void setup() {

table = new Table();

table.addColumn("id");
table.addColumn("species");
table.addColumn("name");

TableRow newRow = table.addRow();
newRow.setInt("id", table.lastRowIndex());
newRow.setString("species", "Panthera leo");
newRow.setString("name", "Lion");

saveTable(table, "data/new.csv");
}

// 这个程序会创建一个叫做 "new.csv"的表格,里面的内容是:
// id,species,name
// 0,Panthera leo,Lion

-------------------------------------------------------------------------------------------------------------

描述

Table对象就像传统的表格一样,是通过多行多列来存储数据的。其中的数据既可以是动态生成的,
也可以是已有的数据。如上面的案例所示,Table对象还可以存储在硬盘中,成为永久数据。


-------------------------------------------------------------------------------------------------------------

方法

addColumn() 在表格里新增加一列
removeColumn() 在表格里删去一列
getColumnCount() 得到表格列数
getRowCount() 得到表格行数
clearRows() 去除所有行的数据
addRow() 在表格中新增加一行
removeRow() 在表格中删去一行
getRow() 得到表格中的一行
rows() 得到表格中的许多行
getInt() 从表格中特定的位置上得到一个整数
setInt() 在表格中特定的位置上存储一个整数
getFloat() 从表格中特定的位置上得到一个浮点数
setFloat() 在表格中特定的位置上存储一个浮点数
getString() 从表格中特定的位置上得到一个字符串
setString() 在表格中特定的位置上存储一个字符串
getStringColumn() 得到某一列的所有值
findRow() 找到有特定值的某一行
findRows() 找到有特定值的所有行
matchRow() 得到满足特定表达式的某一行
matchRows() 得到满足特定表达式的所有行
removeTokens() 从表格中去除字
trim() 从值中去除空白值


-------------------------------------------------------------------------------------------------------------

构造函数

Table()
Table(rows)

-------------------------------------------------------------------------------------------------------------

相关

loadTable()
saveTable()
TableRow

-------------------------------------------------------------------------------------------------------------

003
-------------------------------------------------------------------------------------------------------------
loadTable()
-------------------------------------------------------------------------------------------------------------

案例

//本程序中要使用的mammals.csv是一个短小的CSV文件
//它必须包含于"data"文件夹下或者与源文件同路径
// 它的内容如下
//
// id,species,name
// 0,Capra hircus,Goat
// 1,Panthera pardus,Leopard
// 2,Equus zebra,Zebra

Table table;

void setup() {

table = loadTable("mammals.csv", "header");

println(table.getRowCount() + " total rows in table");

for (TableRow row : table.rows()) {

int id = row.getInt("id");
String species = row.getString("species");
String name = row.getString("name");

println(name + " (" + species + ") has an ID of " + id);
}

}

// 程序输出:
// 3 total rows in table
// Goat (Capra hircus) has an ID of 0
// Leopard (Panthera pardus) has an ID of 1
// Zebra (Equus zebra) has an ID of 2

-------------------------------------------------------------------------------------------------------------

描述

从指定的文件路径或者URL读取内容并且用其中的值创建一个Table对象。如果这个文件是指定的,
那么它就必须在“data”这个文件夹里(或者制定好了的位置),文件路径亦可以使用URL来引用网络
上的文件。

默认情况下,Table对象读取数据时使用的是“逗号分隔格式”(comma-separated version,csv),
如果想使用用空格分隔的数据,请使用tsv格式(tab-separated version,tsv)并在可选参数上声明
(不声明也可使用)

如果文件包含有标题行,请在备选参数上使用“header”。如果文件中并没有标题行,就无视这个参数好了。

当你需要同时声明文件格式以及标题行时,你需要把这些可选参数用逗号分隔开,比如:
loadTable("data.csv","header,tsv")

所有文件的读取和存储都是通过processing的api进行UTF-8编码的。

-------------------------------------------------------------------------------------------------------------

语法

loadTable(filename)
loadTable(filename, options)


-------------------------------------------------------------------------------------------------------------

参数

filename String类型: 文件路径名或者URL

-------------------------------------------------------------------------------------------------------------

返回值

Table

-------------------------------------------------------------------------------------------------------------

相关

Table
saveTable()
loadBytes()
loadStrings()
loadXML()

-------------------------------------------------------------------------------------------------------------

004
-------------------------------------------------------------------------------------------------------------
norm()
-------------------------------------------------------------------------------------------------------------

案例

float value = 20;
float n = norm(value, 0, 50);
println(n); // 打印 "0.4"

-------------

float value = -10;
float n = norm(value, 0, 100);
println(n); // 打印 "-0.1"

-------------------------------------------------------------------------------------------------------------

描述

把一个数从某个范围映射到0-1的范围中,使之标准化。
在实际使用上和map(vale,low,high,0,1)完全相同,并且和map相同,出界的数值并不会被截断,
因为很多时候那些数值仍是很有用的。

-------------------------------------------------------------------------------------------------------------

语法

norm(value, start, stop)

-------------------------------------------------------------------------------------------------------------

参数

value float: the incoming value to be converted
start float: lower bound of the value's current range
stop float: upper bound of the value's current range

-------------------------------------------------------------------------------------------------------------

返回值

float

-------------------------------------------------------------------------------------------------------------

相关

map()
lerp()

-------------------------------------------------------------------------------------------------------------


005
-------------------------------------------------------------------------------------------------------------
lerp()
-------------------------------------------------------------------------------------------------------------

案例

float a = 20;
float b = 80;
float c = lerp(a, b, .2);
float d = lerp(a, b, .5);
float e = lerp(a, b, .8);
beginShape(POINTS);
vertex(a, 50);
vertex(b, 50);
vertex(c, 50);
vertex(d, 50);
vertex(e, 50);
endShape();

-------------

int x1 = 15;
int y1 = 10;
int x2 = 80;
int y2 = 90;
line(x1, y1, x2, y2);
for (int i = 0; i <= 10; i++) {
float x = lerp(x1, x2, i/10.0) + 10;
float y = lerp(y1, y2, i/10.0);
point(x, y);
}


-------------------------------------------------------------------------------------------------------------

描述

可以算出两数之间处于特殊比例上的值。其中amt这个参数就是比例,在0到1之间,
0.1就是这段距离的十分之一,0.5就是一半。lerp()函数在计算一条直线上的缓动时
或者绘制由点构成的线时非常方便。

-------------------------------------------------------------------------------------------------------------

语法

lerp(start, stop, amt)

-------------------------------------------------------------------------------------------------------------

参数

start float: 起点值
stop float: 终点值
amt float: 0.0 到 1.0 的比例(实际上没有取值范围限制)

-------------------------------------------------------------------------------------------------------------

相关

curvePoint()
bezierPoint()
lerp()
lerpColor()

-------------------------------------------------------------------------------------------------------------

posted @ 2015-03-27 21:54  李农伯  阅读(1832)  评论(1编辑  收藏  举报