Path (数学问题)创造积分螺旋:我如何改变”;相对的;位置到绝对位置
最近,我有了一个想法,用点来制作一个钟摆,通过一点学习,我很容易地解决了这个问题:Path (数学问题)创造积分螺旋:我如何改变”;相对的;位置到绝对位置,path,processing,spiral,Path,Processing,Spiral,最近,我有了一个想法,用点来制作一个钟摆,通过一点学习,我很容易地解决了这个问题: 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(radian
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();
}
int contador=0;
int曲率=2;
浮动摆;
无效设置(){
尺寸(300300);
}
作废提款(){
背景(100);
康塔多=(康塔多+1)%360;/“康塔多”从0变为359
pendulo=sin(弧度(康塔多))*曲率;/“pendulo”等于康塔多的sin,因此它反复从1变为-1,然后相乘以强调或减少直线的曲率。
塔洛(宽/2,高/3);
println(pendulo);
}
void tallo(intx,inty){//绘制虚线的函数
pushMatrix();
翻译(x,y);
浮点数_y=0.0;
对于(int i=0;i<25;i++){//创建点序列。
椭圆(0,0,5,5);
_y+=5;
旋转(弧度(摆度));//在每次迭代时旋转它们,这将生成螺旋。
}
popMatrix();
}
简而言之,我所做的是一个函数,它通过旋转函数改变了每个点的位置,然后我只需要在原点坐标中画椭圆,因为这才是真正改变位置并产生摆的东西
[举个例子,如果你是个非犹太人,我只需要再加2分:)]
[捕获示例]
[捕获示例]
到目前为止一切都还好。当我尝试替换由顶点构成的路径的椭圆时,问题出现了。问题很明显:永远不会(视觉上)生成路径,因为所有顶点都将是0,0,因为它们沿着零坐标移动
所以,为了使路径成为可能,我需要每个顶点的绝对值;还有一个问题:我如何获得它们?
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();
}
我知道我要做的是删除变换函数,为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();
}
void tallo(整数x,整数y){
pushMatrix();
翻译(x,y);
//现在我们从更改开始。让我们声明坐标的变量
浮点数x=0.0;
浮点数_y=0.0;
beginShape();
对于(int i=0;i<25;i++){//创建点。
顶点(x,y);//更改为顶点并调用新变量,确定。
//旋转(弧度(摆度));你可以使用简单的三角学。你知道角度和斜边,所以你可以使用cos得到相对的x位置,sin到y。这个位置将相对于中心点
但在我详细解释和做出一些解释之前,让我提出另一种解决方案:PVectors
void setup() {
size(400,400);
frameRate(60);
center = new PVector(width/2, height/3); //defined here because width and height only are set after size()
}
void draw() {
background(255);
fill(0);
stroke(0);
angle = arc_magn*sin( (float) frameCount/60 );
draw_pendulum( center );
}
PVector center;
float angle = 0;
float arc_magn = HALF_PI;
float wire_length = 150;
float rotation_angle = PI/20 /60 ; //we divide it by 60 so the first part is the rotation in one second
void draw_pendulum(PVector origin){
PVector temp_vect = PVector.fromAngle( angle + HALF_PI);
temp_vect.setMag(wire_length);
PVector final_pos = new PVector(origin.x+temp_vect.x, origin.y+temp_vect.y );
ellipse( final_pos.x, final_pos.y, 40, 40);
line(origin.x, origin.y, final_pos.x, final_pos.y);
}
使用PVector类静态方法fromAngle(float angle)返回给定角度的单位向量,然后使用.setMag()定义其长度。
这些PVector方法将为您处理三角学
如果你还想知道它背后的数学原理,我可以再举一个例子