From f52788aa0448494ee4feecde4c06fa5e60d1a168 Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Tue, 6 Jun 2023 18:11:22 +0000 Subject: [PATCH] Split up simulation into time steps Co-authored-by: sigonasr2 --- C++ProjectTemplate.wasm | Bin 308762 -> 313019 bytes main.cpp | 184 ++++++++++++++++++++++++++++------------ 2 files changed, 132 insertions(+), 52 deletions(-) diff --git a/C++ProjectTemplate.wasm b/C++ProjectTemplate.wasm index ea78f01ec6f05763919c182a264a346fa7a1b453..85ce31f92348fdf31f2dba2ebf501dac36314d28 100755 GIT binary patch delta 56716 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 g?i=s|FT_Bt?WL0$+&L+6$u#imRNM9mZY4DN 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 z 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 diff --git a/main.cpp b/main.cpp index f6e4f00..46e1314 100644 --- a/main.cpp +++ b/main.cpp @@ -9,9 +9,16 @@ struct Ball{ vf2d pos={}; vf2d vel={}; vf2d acc={}; + vf2d originalPos={}; float radius=0; float mass=0; + float simTimeRemaining=0; +}; +struct Line{ + vf2d startPos={}; + vf2d endPos={}; + float radius=0; }; class MiniGolfPro : public olc::PixelGameEngine @@ -19,8 +26,11 @@ class MiniGolfPro : public olc::PixelGameEngine public: std::vectorballs; + std::vectorlines; Ball*selectedBall; + Line*selectedLine; std::vector>collidingPairs; + std::vectorfakeBalls; MiniGolfPro() { @@ -35,12 +45,26 @@ public: balls.emplace_back(b); } + void AddLine(vf2d pos1,vf2d pos2,float r){ + Line l; + l.startPos=pos1; + l.endPos=pos2; + l.radius=r; + lines.push_back(l); + } + public: bool OnUserCreate() override { for (int i=0;i<20;i++){ AddBall({float(rand()%ScreenWidth()),float(rand()%ScreenHeight())},rand()%16+2); } + AddLine({12,4},{64,4},5); + AddLine({76,4},{132,4},5); + AddLine({12,68},{64,68},5); + AddLine({76,68},{132,68},5); + AddLine({4,12},{4,60},5); + AddLine({140,12},{140,60},5); return true; } @@ -83,66 +107,113 @@ public: } Clear(BLACK); - for(Ball&b:balls){ - b.acc.x=-b.vel.x*0.8f; - b.acc.y=-b.vel.y*0.8f; - b.vel.x+=b.acc.x*fElapsedTime; - b.vel.y+=b.acc.y*fElapsedTime; - b.pos.x+=b.vel.x*fElapsedTime; - b.pos.y+=b.vel.y*fElapsedTime; - - if(b.pos.x<0){ - b.pos.x+=ScreenWidth(); - } - if(b.pos.y<0){ - b.pos.y+=ScreenHeight(); - } - if(b.pos.x>=ScreenWidth()){ - b.pos.x-=ScreenWidth(); - } - if(b.pos.y>=ScreenHeight()){ - b.pos.y-=ScreenHeight(); - } - if(fabs(b.vel.x*b.vel.x+b.vel.y*b.vel.y)<0.01){ - b.vel.x=0; - b.vel.y=0; + float stable=0.01f; + int simulationUpdates=4; + int maxSimulationSteps=15; + float simElapsedTime=fElapsedTime/(float)simulationUpdates; + + for(int i=0;i0){ + b.originalPos.x=b.pos.x; + b.originalPos.y=b.pos.y; + b.acc.x=-b.vel.x*0.8f; + b.acc.y=-b.vel.y*0.8f/*+100.f //Gravity constant*/; + b.vel.x+=b.acc.x*b.simTimeRemaining; + b.vel.y+=b.acc.y*b.simTimeRemaining; + b.pos.x+=b.vel.x*b.simTimeRemaining; + b.pos.y+=b.vel.y*b.simTimeRemaining; + + if(b.pos.x<0){ + b.pos.x+=ScreenWidth(); + } + if(b.pos.y<0){ + b.pos.y+=ScreenHeight(); + } + if(b.pos.x>=ScreenWidth()){ + b.pos.x-=ScreenWidth(); + } + if(b.pos.y>=ScreenHeight()){ + b.pos.y-=ScreenHeight(); + } + + if(fabs(b.vel.x*b.vel.x+b.vel.y*b.vel.y)radius=l.radius; + fakeBall->mass=b.mass*0.8f; + fakeBall->pos=closestPoint; + fakeBall->vel={-b.vel.x,-b.vel.y}; + fakeBalls.push_back(fakeBall); + collidingPairs.push_back({&b,fakeBall}); + float overlap=1.f*(dist-b.radius-fakeBall->radius); + b.pos.x-=overlap*(b.pos.x-fakeBall->pos.x)/dist; + b.pos.y-=overlap*(b.pos.y-fakeBall->pos.y)/dist; + } } + for(Ball&b2:balls){ + if(&b!=&b2){ + if(DoCirclesOverlap(b.pos,b.radius,b2.pos,b2.radius)){ + collidingPairs.push_back({&b,&b2}); + float dist=sqrtf((b.pos.x-b2.pos.x)*(b.pos.x-b2.pos.x)+(b.pos.y-b2.pos.y)*(b.pos.y-b2.pos.y)); + float overlap=0.5f*(dist-b.radius-b2.radius); + b.pos.x-=overlap*(b.pos.x-b2.pos.x)/dist; + b.pos.y-=overlap*(b.pos.y-b2.pos.y)/dist; + b2.pos.x+=overlap*(b.pos.x-b2.pos.x)/dist; + b2.pos.y+=overlap*(b.pos.y-b2.pos.y)/dist; + } + } + } + float intendedSpeed=sqrtf(b.vel.x+b.vel.y*b.vel.y); + float intendedDist=intendedSpeed*b.simTimeRemaining; + float actualDist=sqrtf((b.pos.x-b.originalPos.x)*(b.pos.x-b.originalPos.x)+(b.pos.y-b.originalPos.y)*(b.pos.y-b.originalPos.y)); + float actualTime=actualDist/intendedSpeed; + b.simTimeRemaining=b.simTimeRemaining-actualTime; + } + float efficiency=1; + for(std::pair&pair:collidingPairs){ + Ball*b1=pair.first; + Ball*b2=pair.second; + float dist=sqrtf((b1->pos.x-b2->pos.x)*(b1->pos.x-b2->pos.x)+(b1->pos.y-b2->pos.y)*(b1->pos.y-b2->pos.y)); + vf2d normal={(b2->pos.x-b1->pos.x)/dist,(b2->pos.y-b1->pos.y)/dist}; + vf2d tangent={-normal.y,normal.x}; + vf2d dpTangent={tangent.dot(b1->vel),tangent.dot(b2->vel)}; + vf2d dpNormal={normal.dot(b1->vel),normal.dot(b2->vel)}; + vf2d momentum={(dpNormal.x*(b1->mass-b2->mass)+2.f*b2->mass*dpNormal.y)/(b1->mass+b2->mass),(dpNormal.y*(b2->mass-b1->mass)+2.f*b1->mass*dpNormal.x)/(b1->mass+b2->mass)}; + b1->vel.x=tangent.x*dpTangent.x+normal.x*momentum.x; + b1->vel.y=tangent.y*dpTangent.x+normal.y*momentum.x; + b2->vel.x=tangent.x*dpTangent.y+normal.x*momentum.y; + b2->vel.y=tangent.y*dpTangent.y+normal.y*momentum.y; } - } - } - for(std::pair&pair:collidingPairs){ - Ball*b1=pair.first; - Ball*b2=pair.second; - float dist=sqrtf((b1->pos.x-b2->pos.x)*(b1->pos.x-b2->pos.x)+(b1->pos.y-b2->pos.y)*(b1->pos.y-b2->pos.y)); - vf2d normal={(b2->pos.x-b1->pos.x)/dist,(b2->pos.y-b1->pos.y)/dist}; - vf2d tangent={-normal.y,normal.x}; - vf2d dpTangent={tangent.dot(b1->vel),tangent.dot(b2->vel)}; - vf2d dpNormal={normal.dot(b1->vel),normal.dot(b2->vel)}; - vf2d momentum={(dpNormal.x*(b1->mass-b2->mass)+2.f*b2->mass*dpNormal.y)/(b1->mass+b2->mass),(dpNormal.y*(b2->mass-b1->mass)+2.f*b1->mass*dpNormal.x)/(b1->mass+b2->mass)}; - b1->vel.x=tangent.x*dpTangent.x+normal.x*momentum.x; - b1->vel.y=tangent.y*dpTangent.x+normal.y*momentum.x; - b2->vel.x=tangent.x*dpTangent.y+normal.x*momentum.y; - b2->vel.y=tangent.y*dpTangent.y+normal.y*momentum.y; + collidingPairs.clear(); + for(Ball*fb:fakeBalls){ + delete fb; + } + fakeBalls.clear(); + } } - collidingPairs.clear(); - for(Ball&b:balls){ if(selectedBall==&b){ FillCircle(b.pos,b.radius,YELLOW); @@ -150,6 +221,15 @@ public: FillCircle(b.pos,b.radius); } } + for(Line&l:lines){ + FillCircle(l.startPos,l.radius); + FillCircle(l.endPos,l.radius); + vf2d normal={-(l.endPos.y-l.startPos.y),l.endPos.x-l.startPos.x}; + float dist=sqrt(normal.x*normal.x+normal.y*normal.y); + normal/=dist; + DrawLine(l.startPos.x+normal.x*l.radius,l.startPos.y+normal.y*l.radius,l.endPos.x+normal.x*l.radius,l.endPos.y+normal.y*l.radius); + DrawLine(l.startPos.x-normal.x*l.radius,l.startPos.y-normal.y*l.radius,l.endPos.x-normal.x*l.radius,l.endPos.y-normal.y*l.radius); + } return true; }