我正在使用处理,我很好奇如何访问原语的属性。该参考提供了构造这些原语的参数,但没有关于属性的信息。例如(我正在尝试做一些比这更复杂的事情,但这会为简单起见),如果我创建一条长度不断变化的线,有没有办法打印该线的长度:
int lineLength = 0;
void draw(){
line(random(0,50),random(0,50),lineLength,lineLength);
lineLength++;
printLn(line.length);
}
我正在使用处理,我很好奇如何访问原语的属性。该参考提供了构造这些原语的参数,但没有关于属性的信息。例如(我正在尝试做一些比这更复杂的事情,但这会为简单起见),如果我创建一条长度不断变化的线,有没有办法打印该线的长度:
int lineLength = 0;
void draw(){
line(random(0,50),random(0,50),lineLength,lineLength);
lineLength++;
printLn(line.length);
}
我不确定您所说的“原始”是什么意思。如果您的意思是绘图函数(例如point(),line(),triangle(),rect(),ellipse(),beginShape(),endShape(),vertex()
等),那么这些只是处理使用传递的参数/参数在屏幕上渲染形状一次的函数。调用函数后,参数会丢失,除非它们存储在某个地方的变量中。
例如,一条线由两个点定义,因此您可以随意存储/修改它们,并在需要时简单地渲染:
PVector p1,p2;
void setup(){
p1 = new PVector(random(100),random(100));
p2 = new PVector(random(100),random(100));
}
void draw(){
line(p1.x,p1.y,p2.x,p2.y);
println("length: " + p1.dist(p2));
}
仅仅因为在 Processing 中没有定义 Line 类并不意味着你不能拿出你自己的版本来做你需要它做的事情:
Line l = new Line(random(100),random(100),random(100),random(100));
void draw(){
background(127);
l.draw();
text("length: " + l.length(),1,10);
text("mouse dist:\n" + (int)l.distanceToPoint(new PVector(mouseX,mouseY)),1,20);
}
class Line{
PVector p1,p2;
Line(float x1,float y1,float x2,float y2){
p1 = new PVector(x1,y1);
p2 = new PVector(x2,y2);
}
void draw(){
line(p1.x,p1.y,p2.x,p2.y);
}
float length(){
return p1.dist(p2);
}
//other awesome line stuff here
//'kindly borrowed' from: http://paulbourke.net/geometry/pointline/
float distanceToPoint(PVector p){
float dx = p2.x - p1.x;
float dy = p2.y - p1.y;
float u = ((p.x - p1.x) * dx + (p.y - p1.y) * dy) / (dx * dx + dy * dy);//traversal(% 0.0 to 1.0) along line
PVector closest;
if(u < 0) closest = p1;
else if(u > 1) closest = p2;
else closest = new PVector(p1.x + u * dx, p1.y + u * dy);
return closest.dist(p);
}
}
当然,您也可以使用提供此类功能的库,例如toxiclibs。
高温高压