使用 R 语言实现新媒体艺术作品
新媒体艺术
Authot: Tealeaf, Contra, AnYong Cui
2012 除夕夜北京地区短信数据的可视化作品
What Is Processing
Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts
A Programmer's Perspective
- 输出是图形或者动画的编程语言
- 语法与 Java 类似,部分复用了 Java 的 compiler
What Is Processing
What could Processing do?
What could Processing do?
What could Processing do?
What Is R
You know better than me!
What Is Processing.R
Outline
-
Installation
-
HOWTO
-
2D
-
Event System
-
3D
-
Libraries
-
Multiple Languages
-
- Implementation
关于我
- 上海交通大学 软件学院 研究生二年级
- Processing.R 作者
How to Install
2D
Event
settings <- function() {
size(480, 120)
}
draw <- function() {
if (mousePressedVar == TRUE) {
fill(0)
} else {
fill(255)
}
ellipse(mouseX, mouseY, 80, 80)
}
Event
3D
settings <- function() {
size(640, 360, P3D)
}
draw <- function() {
background(0)
camera(mouseX, height/2,
(height/2) / tan(PI/6), width/2, height/2, 0, 0, 1, 0)
translate(width/2, height/2, -100)
stroke(255)
noFill()
box(200)
}
3D
Library
Library
R Packages Support
Documentation
Technologies Behind Processing.R
- Java RMI
- JVM-based R Interpreter
Architecture
Renjin
The biggest advantage of Renjin is that the R interpreter itself is a Java module which can be seamlessly integrated into any Java application.
public class TryRenjin {
public static void main(String[] args) throws Exception {
// create a script engine manager:
RenjinScriptEngineFactory factory
= new RenjinScriptEngineFactory();
// create a Renjin engine:
ScriptEngine engine = factory.getScriptEngine();
engine.eval("df <- data.frame(x=1:10, y=(1:10)+rnorm(n=10))");
engine.eval("print(df)");
engine.eval("print(lm(y ~ x, df))");
}
}
Mixing Java & R code
Raw Logic in Processing
public class PApplet {
public void draw() {
// Insert the logic to the template and compile it.
}
}
Mixing Java & R code
Trade-off in Processing.R
public class PApplet {
public void draw() {
rInterpreterInJVM.eval(code.getFunction("draw"))
}
}
Mixing Java & R code
Pros & Cons
- 实现简单
- 与 Java 部分解耦
- 不能实现 Java 回调 R 中函数
Future Work
- 实现对更多 R Packages 和 Processing Libraries 的支持
- 支持 R style API (Matrix 等等)
Thanks
Q&A
Copy of Processing.R
By gaocegege
Copy of Processing.R
Introduction to Processing.R
- 1,033