我的这个牛顿摇篮的代码不工作。我该如何解决?
My code for this newton's cradle isn't working. How do I fix this?
PVector start1;
PVector end1;
PVector start2;
PVector end2;
float e = 0; //angle
float l = 350; //length
float add = 0.05;//add(to angle)
float e2 = 0;//other angle
float add2 = 0; //add to second angle
void setup() { //setup the canvas
size(1600, 1000);
smooth();
strokeWeight(10);
start1=new PVector(950,300);
end1=new PVector();
start2=new PVector(650,300);
end2=new PVector();
}
void draw() {
background(0);
stroke(57,255,20);
fill(57,255,20);
ellipse(850,650,100,100);
ellipse(750,650,100,100);
line(750,300,750,600);
line(850,300,850,600);
end1.x=start1.x+l*sin(e);
end1.y=start1.y+l*cos(e);
end2.x=start2.x+l*sin(e2);
end2.y=start2.y+l*cos(e2);
ellipse(end1.x,end1.y,100,100);
ellipse(end2.x,end2.y,100,100);
line(start1.x,start1.y,end1.x,end1.y);
line(start2.x,start2.y,end2.x,end2.y);
e+=add;
e2-=add2;
if(e<0){
add=0;
add2=0.05;
}
if(e>1){
add*=-1;
}
if(e2<-1){
}
}
我知道问题出在最后几行,但我不知道如何解决这个问题。问题是每次 e2
变为负数,特别是小于 -1
,代码表示现在 add2
必须乘以 -1
才能走另一条路。但是,一旦它大于 -1,代码也会告诉它当 e 小于 0(它是)时,add2=0.05
。所以发生的事情是它在 >-1
和 <-1
之间波动。我该如何解决这个问题?
P.S。这个解释只是我认为的问题,但它可能完全不同。
添加积分状态变量actPendle
,表示移动的摆杆。 add
和 add2
必须用 0.05 初始化:
int actPendle = 1;
float add = 0.05;//add(to angle)
float add2 = 0.05; //add to second angle
float e = 0; //angle
float e2 = 0;//other angle
如果actPendle == 1
,则移动第一个柱。如果它已完成移动,则切换到另一个笔直。对第二个 pendle 做同样的事情:
void draw() {
// [...]
if (actPendle == 1) {
e += add;
if(e > 1){
add *= -1;
} else if (e < 0) {
add *= -1;
actPendle = 2;
}
}
if (actPendle == 2) {
e2 -= add2;
if(e2 < -1){
add2 *= -1;
} else if (e2 > 0) {
add2 *= -1;
actPendle = 1;
}
}
}
PVector start1;
PVector end1;
PVector start2;
PVector end2;
float e = 0; //angle
float l = 350; //length
float add = 0.05;//add(to angle)
float e2 = 0;//other angle
float add2 = 0; //add to second angle
void setup() { //setup the canvas
size(1600, 1000);
smooth();
strokeWeight(10);
start1=new PVector(950,300);
end1=new PVector();
start2=new PVector(650,300);
end2=new PVector();
}
void draw() {
background(0);
stroke(57,255,20);
fill(57,255,20);
ellipse(850,650,100,100);
ellipse(750,650,100,100);
line(750,300,750,600);
line(850,300,850,600);
end1.x=start1.x+l*sin(e);
end1.y=start1.y+l*cos(e);
end2.x=start2.x+l*sin(e2);
end2.y=start2.y+l*cos(e2);
ellipse(end1.x,end1.y,100,100);
ellipse(end2.x,end2.y,100,100);
line(start1.x,start1.y,end1.x,end1.y);
line(start2.x,start2.y,end2.x,end2.y);
e+=add;
e2-=add2;
if(e<0){
add=0;
add2=0.05;
}
if(e>1){
add*=-1;
}
if(e2<-1){
}
}
我知道问题出在最后几行,但我不知道如何解决这个问题。问题是每次 e2
变为负数,特别是小于 -1
,代码表示现在 add2
必须乘以 -1
才能走另一条路。但是,一旦它大于 -1,代码也会告诉它当 e 小于 0(它是)时,add2=0.05
。所以发生的事情是它在 >-1
和 <-1
之间波动。我该如何解决这个问题?
P.S。这个解释只是我认为的问题,但它可能完全不同。
添加积分状态变量actPendle
,表示移动的摆杆。 add
和 add2
必须用 0.05 初始化:
int actPendle = 1;
float add = 0.05;//add(to angle)
float add2 = 0.05; //add to second angle
float e = 0; //angle
float e2 = 0;//other angle
如果actPendle == 1
,则移动第一个柱。如果它已完成移动,则切换到另一个笔直。对第二个 pendle 做同样的事情:
void draw() {
// [...]
if (actPendle == 1) {
e += add;
if(e > 1){
add *= -1;
} else if (e < 0) {
add *= -1;
actPendle = 2;
}
}
if (actPendle == 2) {
e2 -= add2;
if(e2 < -1){
add2 *= -1;
} else if (e2 > 0) {
add2 *= -1;
actPendle = 1;
}
}
}