最近我有了一个想法,用Processing制作一个钟摆,通过一点学习我很容易解决了它:
int contador = 0;
int curvatura = 2;
float pendulo;
void setup(){
size(300,300);
}
void draw(){
background(100);
contador = (contador + 1) % 360; //"CONTADOR" GOES FROM 0 TO 359
pendulo = sin(radians(contador))*curvatura; //"PENDULO" EQUALS THE SIN OF CONTADOR, SO IT GOES FROM 1 TO -1 REPEATEDLY, THEN IS MULTIPLIED TO EMPHASIZE OR REDUCE THE CURVATURE OF THE LINE.
tallo(width/2,height/3);
println(pendulo);
}
void tallo (int x, int y){ //THE FUNTION TO DRAW THE DOTTED LINE
pushMatrix();
translate(x,y);
float _y = 0.0;
for(int i = 0; i < 25; i++){ //CREATES THE POINTS SEQUENCE.
ellipse(0,0,5,5);
_y+=5;
rotate(radians(pendulo)); //ROTATE THEM ON EACH ITERATION, THIS MAKES THE SPIRAL.
}
popMatrix();
}
所以,简而言之,我所做的是一个用旋转功能改变每个点位置的函数,然后我只需要在原点坐标中绘制椭圆,因为这是改变位置并产生钟摆错觉的真实事物。
[捕获示例,如果您如此异教徒,我只需要多 2 分 :)]
[捕获示例]
[捕获示例]
到目前为止一切都很好。当我尝试将椭圆替换为由 vertices 组成的路径时,出现了问题。问题很明显:永远不会(视觉上)创建路径,因为所有顶点都将随着零坐标移动而为 0,0。
因此,为了使路径成为可能,我需要每个顶点的绝对值;还有一个问题:我如何得到它们?
我知道我必须做的是删除变换函数,为 X 和 Y 位置创建变量并在 for 中更新它们,但是然后呢?这就是为什么我清除了这是一个数学问题,我必须在 X 和 Y 变量中添加哪个操作才能使路径及其曲率成为可能?
void tallo (int x, int y){
pushMatrix();
translate(x,y);
//NOW WE START WITH THE CHANGES. LET'S DECLARE THE VARIABLES FOR THE COORDINATES
float _x = 0.0;
float _y = 0.0;
beginShape();
for(int i = 0; i < 25; i++){ //CREATES THE DOTS.
vertex(_x,_y); //CHANGING TO VERTICES AND CALLING THE NEW VARIABLES, OK.
//rotate(radians(pendulo)); <--- HERE IS MY PROBLEM. HOW DO I CONVERT THIS INTO X AND Y COORDINATES?
//_x = _x + ????;
_y = _y + 5 /* + ???? */;
}
endShape();
popMatrix();
}
我们需要记住,pendulo 的 x 和 y 值在 for 的每次迭代中都会发生变化,它不必每次都添加相同的数量。添加必须是渐进的。否则,我们会看到一条直线旋转,而不是一条突出其曲率的曲线(如果将 curvatura 的值增加到大于 20 的数字,您会注意到螺旋)
所以,旋转坐标是一个很好的解决方案,现在思考螺旋的 x 和 y 坐标的数学解决方案有点混乱,我中学的知识还不够。我知道我必须在 for 中创建另一个变量才能进行此进展,但它应该有什么操作?
我会很高兴知道,数学