# This is the third chapter of the book "The Nature of Code" about friction and resistance, I don't know what the problem is, as a beginner this is my first problem I can't solve, so I ask you for help.THANKS！

please format code with </> button * homework policy * asking questions

Mover[] movers = new Mover[100];
Liquid liquid;
void setup(){
size(640,320);
smooth();
for(int i =0;i<movers.length;i++){
movers[i] = new Mover(random(0.1,5),0,0);
}
liquid = new Liquid(0,height,2,height/2,0.1);
}

void draw(){
background(255);
liquid.display();
PVector wind=new PVector(0.01,0);
// PVector gravity=new PVector(0,0.1);
for(int i =0;i<movers.length;i++){
if(movers[i].isInside(liquid)){
movers[i].drag(liquid);
}
float m =0.1*movers[i].mass;
PVector gravity = new PVector(0,m);
float c =0.1;
PVector friction = movers[i].velocity.get();
friction.mult(-1);
friction.normalize();
friction.mult(c);

movers[i].applyForce(friction);
movers[i].applyForce(wind);
movers[i].applyForce(gravity);
movers[i].update();
movers[i].display();
movers[i].checkEdges();
}
}

class Mover{
PVector location;
PVector velocity;
PVector acceleration;
float mass;
Mover(float m,float x,float y){
mass= m;
location = new PVector(x,y);
velocity = new PVector(0,0);
acceleration = new PVector(0,0);
}
void applyForce(PVector force){
PVector f = PVector.div(force,mass);
}
void update(){
acceleration.mult(0);
}
void display(){
stroke(0);
fill(174);
ellipse(location.x,location.y,mass16,mass16);
}
void checkEdges(){
if(location.x>width){
location.x = width;
velocity.x*=-1;
}else if(location.x < 0){
velocity.x*=-1;
location.x = 0;
}
if(location.y>height){
velocity.y*=-1;
location.y = height;
}
}
}

class Liquid{
float x,y,w,h;
float c;
PVector acceleration;
float mass;
PVector location;
PVector velocity;
Liquid(float x_,float y_,float w_,float h_,float c_){
x=x_;
y=y_;
w=w_;
h=h_;
c=c_;
}
void display(){
noStroke();
fill(174);
rect(x,y,w,h);
}
void applyForce(PVector force){
PVector f = PVector.div(force,mass);
}

boolean isInside(Liquid l){
if(location.x>l.x && location.x<l.x+l.w && location.y>l.y && location.y<l.y+l.h){
return true;
}else{
return false;
}
}

void drag(Liquid l){
float speed = velocity.mag();
float dragMagnitude = l.cspeedspeed;
PVector drag = velocity.get();
drag.mult(-1);
drag.normalize();
drag.mult(dragMagnitude);
applyForce(drag);
}
}

1 Like

Hello,

`:)`