不知道这一章写什么。
前面的写累了,这个没有心思想了,就写一个简单的弹簧和小球的模拟吧。
结果是这样的:
它的实现也非常清晰可见。把小球和弹簧分别考虑,小球的运动按照速度、加速度的不同其实可以分为四个阶段:自由下落阶段、接触到弹簧之后受到弹力而减速的阶段、速度减为零之后受到弹簧向上的弹力加速上升的阶段、离开弹簧之后的减速运动。
我们先什么都不要管,定义一个小球和一个弹簧:
由于我们要求弹簧是可以压缩的,显然我们每一帧重新绘制它是不现实的。我们需要把弹簧首先做成一个固定的、可以调整高度的形状。我们使用PShape类。我们将仅仅通过一个可变的长度lenght的值来构造一个弹簧。由于我们弹簧的高度是不停地变化的,所以这样做是必要的,能够允许我们在弹簧长度变化的时候仅向一个弹簧绘图函数传入一个长度作为参数来生成一个我们需要的弹簧。
PShape spring;
构造弹簧:
void drawSpring(PVector position, int springLength){
stroke(0);
strokeWeight(2);
noFill();
pushMatrix();
translate(position.x, position.y);
beginShape();
vertex(-25,0);
vertex(25,0);
vertex(-25,-1*springLength/10);
vertex(25,-2*springLength/10);
vertex(-25,-3*springLength/10);
vertex(25,-4*springLength/10);
vertex(-25,-5*springLength/10);
vertex(25,-6*springLength/10);
vertex(-25,-7*springLength/10);
vertex(25,-8*springLength/10);
vertex(-25,-9*springLength/10);
vertex