yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #21332
Re: [Question #686076]: Problem of Bodies rotation
Question #686076 on Yade changed:
https://answers.launchpad.net/yade/+question/686076
yang yi posted a new comment:
Thanks for Jan Stránský (honzik) and Chareyre (bruno-chareyre-9) very much.
I tired the RotationEngine before using O.bodies[i].state.angVel . However, the speed I cound not change during simulation. The Code is as below:
O.engines = [
。。。。。。
RotationEngine(rotationAxis=(0, 0, 1), angularVelocity= velocity, rotateAroundZero=True, zeroPoint=(0, 0, 0)),
PyRunner(comment= "ChangeVelocity()"....)
]
But the velocity can not changed. So I tried the third way. Yestoday
night, I fund the function of RotationEngine in the
KinematicEngines.cpp, I understand the Chareyre's advise that the
velocity should be improved during the angleVelocity. I wirte the code
now, But I meet a new problem, I can not find the function of
AngleAxisr(). The code of RotationEngine is
void RotationEngine::apply(const vector<Body::id_t>& ids){
if (ids.size()>0) {
#ifdef YADE_OPENMP
const long size=ids.size();
#pragma omp parallel for schedule(static)
for(long i=0; i<size; i++){
const Body::id_t& id=ids[i];
#else
FOREACH(Body::id_t id,ids){
#endif
assert(id<(Body::id_t)scene->bodies->size());
Body* b=Body::byId(id,scene).get();
if(!b) continue;
b->state->angVel+=rotationAxis*angularVelocity;
if(rotateAroundZero){
const Vector3r l=b->state->pos-zeroPoint;
Quaternionr q(AngleAxisr(angularVelocity*scene->dt,rotationAxis));
Vector3r newPos=q*l+zeroPoint;
b->state->vel+=Vector3r(newPos-b->state->pos)/scene->dt;
}
}
} else {
LOG_WARN("The list of ids is empty! Can't move any body.");
}
}
So I need to write the function AngleAxisr().
Thank you very much!!!!
Yang Yi
--
You received this question notification because your team yade-users is
an answer contact for Yade.