void GroupT::CalcReaction() { double SumFx=0; double SumFy=0; double SumTorque=0; for (list<Force *>::iterator f = s1->forces.begin(); f!=s1->forces.end(); f++) { Force *x = *f; if(x->IsCalculatedx()) SumFx+=x->GetForcex(); if(x->IsCalculatedy()) SumFy+=x->GetForcey(); if(x->IsCalculatedt()) SumTorque+=x->GetForcet(); } O->R1->SetForce(-SumFx,-SumFy,0); O->R2->SetForce(SumFx,SumFy,0); }
void GroupTTT::CalcReaction() { double SumTorque1=0; for (list<Force *>::iterator f = s1->forces.begin(); f!=s1->forces.end(); f++) { Force *Fi = *f; double T=0; double Fx=0; double Fy=0; if(Fi->IsCalculatedt()) T=Fi->GetForcet(); if(Fi->IsCalculatedx()) Fx=Fi->GetForcex(); if(Fi->IsCalculatedy()) Fy=Fi->GetForcey(); double leverx = -Fi->linear->x.GetTF0()+A->linear.x.GetTF0(); double levery = -Fi->linear->y.GetTF0()+A->linear.y.GetTF0(); SumTorque1+=T+Fx*leverx-Fy*levery; } double SumTorque2=0; /* dd:=(yb[i]-ya[i])*(xb[i]-xc[i])+(yb[i]-yc[i])*(xa[i]-xb[i]); dd1:=-k3*(xb[i]-xc[i])+k4*(xa[i]-xb[i]); dd2:=k4*(ya[i]-yb[i])+k3*(yb[i]-yc[i]); */ for (list<Force *>::iterator f = s2->forces.begin(); f!=s2->forces.end(); f++) { Force *Fi = *f; double T=0; double Fx=0; double Fy=0; if(Fi->IsCalculatedt()) T=Fi->GetForcet(); if(Fi->IsCalculatedx()) Fx=Fi->GetForcex(); if(Fi->IsCalculatedy()) Fy=Fi->GetForcey(); double leverx = -Fi->linear->x.GetTF0()+C->linear.x.GetTF0(); double levery = -Fi->linear->y.GetTF0()+C->linear.y.GetTF0(); SumTorque2+=T+Fx*leverx-Fy*levery; } /* dd:=(yb[i]-ya[i])*(xb[i]-xc[i])+(yb[i]-yc[i])*(xa[i]-xb[i]); dd1:=-k3*(xb[i]-xc[i])+k4*(xa[i]-xb[i]); dd2:=k4*(ya[i]-yb[i])+k3*(yb[i]-yc[i]); */ double leverxAB = A->linear.x.GetTF0()-B->linear.x.GetTF0(); double leveryAB = A->linear.y.GetTF0()-B->linear.y.GetTF0(); double leverxCB = C->linear.x.GetTF0()-B->linear.x.GetTF0(); double leveryCB = C->linear.y.GetTF0()-B->linear.y.GetTF0(); double d=leveryAB*leverxCB-leverxAB*leveryCB; double d1=SumTorque1*leverxCB+SumTorque2*leverxAB; double d2=SumTorque2*leveryAB+SumTorque1*leveryCB; double R21x=d1/d; double R21y=d2/d; B->R1->SetForce(R21x,R21y,0); B->R2->SetForce(-R21x,-R21y,0); double SumFx1=0; double SumFy1=0; for (list<Force *>::iterator f = s1->forces.begin(); f!=s1->forces.end(); f++) { Force *Fi = *f; if(Fi->IsCalculatedx()) SumFx1+=Fi->GetForcex(); if(Fi->IsCalculatedy()) SumFy1+=Fi->GetForcey(); } double RAx=-SumFx1; double RAy=-SumFy1; A->R1->SetForce(RAx,RAy,0); A->R2->SetForce(-RAx,-RAy,0); double SumFx2=0; double SumFy2=0; for (list<Force *>::iterator f = s2->forces.begin(); f!=s2->forces.end(); f++) { Force *x = *f; if(x->IsCalculatedx()) SumFx2+=x->GetForcex(); if(x->IsCalculatedy()) SumFy2+=x->GetForcey(); } double RCx=-SumFx2; double RCy=-SumFy2; C->R2->SetForce(RCx,RCy,0); C->R1->SetForce(-RCx,-RCy,0); }