Re: [Yade-users] [Question #686076]: Problem of Bodies rotation

2019-11-22 Thread yang yi
Question #686076 on Yade changed:
https://answers.launchpad.net/yade/+question/686076

Status: Answered => Solved

yang yi confirmed that the question is solved:
Thanks Jan Stránský, that solved my question.

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #686076]: Problem of Bodies rotation

2019-11-22 Thread Jan Stránský
Question #686076 on Yade changed:
https://answers.launchpad.net/yade/+question/686076

Jan Stránský proposed the following answer:
1) you have to change velocity directly of RotationEngine (see my
previous anwer #5). This way, you change a global velocity variable, byt
RotationEngine has its copy and the change has no effect on it.

2) again see #5, should be
q = Quaternion(rotationAxis, angVel* O.dt) # without any AngleAxis stuff

cheers
Jan

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #686076]: Problem of Bodies rotation

2019-11-22 Thread yang yi
Question #686076 on Yade changed:
https://answers.launchpad.net/yade/+question/686076

yang yi posted a new comment:
Thank you very much!! Jan Stránský
Now  I  have two problem

(1) for  using RotationEngine,   I hope the following code can change
the direction of the plane by  the PyRunner function ChangeVelocity, but
it cannot, the value of Velocity can be changed, but the plane still
Rotation as the initial speed and direction.

velocity = 10 
def ChangeVelocity():
global velocity
velocity = -1 * velocity


O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb()]),
InteractionLoop(
# handle sphere+sphere and facet+sphere collisions
[Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]),
# [Ip2_ViscElMat_ViscElMat_ViscElPhys()],
# [Law2_ScGeom_ViscElPhys_Basic()]),
NewtonIntegrator(gravity=(-9.8, 0, 0), damping=0.001, label='down'),
RotationEngine(rotationAxis=(0, 0, 1), angularVelocity=velocity, 
rotateAroundZero=True, zeroPoint=(0, 0, 0)),
PyRunner(command="ChangeVelocity()", iterPeriod=10)

]

(2)  The problem of transform the C++ code  of RotationEngine to python,
I hope I can control the rotation velocity of the plane.

def myRotation():
ZeroPos = Vector3(1, 1, 0)
rotationAxis = Vector3(0, 0, 1)
angVel = 10
for i in IDGround:
O.bodies[i].state.angVel += rotationAxis * angVel
l = O.bodies[i].state.pos - ZeroPos
q = Quaternion(AngleAxis(rotationAxis, angVel* O.dt))
# q = Quaternion(rotationAxis, angVel * O.dt)
newp = q*l + ZeroPos
O.bodies[i].state.vel += (newp - O.bodies[i].state.pos)/O.dt

O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb()]),
InteractionLoop(
# handle sphere+sphere and facet+sphere collisions
[Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]),
# [Ip2_ViscElMat_ViscElMat_ViscElPhys()],
# [Law2_ScGeom_ViscElPhys_Basic()]),
NewtonIntegrator(gravity=(-9.8, 0, 0), damping=0.001, label='down'),
PyRunner(command="myRotation()",iterPeriod=40)
# RotationEngine(rotationAxis=(0, 0, 1), angularVelocity=velocity, 
rotateAroundZero=True, zeroPoint=(0, 0, 0)),
# PyRunner(command="ChangeVelocity()", iterPeriod=10)
]

I  can find the "AngleAxis", and the error is "name 'AngleAxis' is
not defined".  The above code is follow the C++ in the
KinematicEngines.cpp.   I don't know if the  transform is correct or
not.

 Please help me,Thank you very much,

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #686076]: Problem of Bodies rotation

2019-11-22 Thread Jan Stránský
Question #686076 on Yade changed:
https://answers.launchpad.net/yade/+question/686076

Jan Stránský proposed the following answer:
> However, the speed I cound not change during simulation.
> But the velocity can not changed.

Why?
Please always try to be specific. Did you get an error? What error? The 
velocity did not change? How did you investigate it? ...
###
RotationEngine(..., label="rotEngine")
...
def myRotation():
   rotEngine.angularVelocity = whatever
###

Concerning axis-angle, in Python Quaternion can be constructed directly from 
axis and angle:
C++: Quaternionr q(AngleAxisr(angularVelocity*scene->dt,rotationAxis));
Python: q = Quaternion(rotationAxis,angularVelocity*O.dt)

cheers
Jan

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #686076]: Problem of Bodies rotation

2019-11-21 Thread yang yi
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& ids){
if (ids.size()>0) {
#ifdef YADE_OPENMP
const long size=ids.size();
#pragma omp parallel for schedule(static)
for(long i=0; ibodies->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.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #686076]: Problem of Bodies rotation

2019-11-21 Thread Jan Stránský
Question #686076 on Yade changed:
https://answers.launchpad.net/yade/+question/686076

Jan Stránský posted a new comment:
Just a note, 3) and 1) does the same, either "automatically" (1) or "manually" 
(3)
Jan

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #686076]: Problem of Bodies rotation

2019-11-21 Thread Chareyre
Question #686076 on Yade changed:
https://answers.launchpad.net/yade/+question/686076

Chareyre proposed the following answer:
Hi, I would support 2) for the sake of performance, but there's also
3) fix myRotation() since obviously imposing rigid body motion needs to
impose 'vel' too (spin*pos), not just 'angVel'.
Bruno

Le jeu. 21 nov. 2019 12:58, yang yi 
a écrit :

> New question #686076 on Yade:
> https://answers.launchpad.net/yade/+question/686076
>
> I hope to design a plane named IDGround, it can rotate with the given
> velocity, and it can be controlled to start, stop, change the speed and the
> direction in the simulation.
> I used the pack.sweptPolylines2gtsSurface to establish the plane, and used
> the O.bodies[i].state.angVel to set the velocity. It can rotate. But the
> plane is combined by two triangles, so there are two bodies in the plane,
> and each of them rotates around the itself axis.  I hope both of them
> rotating around a given axis. How can I change my code as follows??
> Thank you very much.
>
> Yang Yi
>
> positionGround = [
>  Vector3(0,0,0),
>  Vector3(1,0,0),
>  Vector3(1,1,0),
>  Vector3(0,1,0)
>  ]
> Ground = pack.sweptPolylines2gtsSurface([positionGround], capStart=True,
> capEnd=True)
> IDGround = O.bodies.append(pack.gtsSurface2Facets(Ground, color=(1,0,1)))
>
> def myRotation():
> for i in IDGround:
> O.bodies[i].state.angVel=(0, 0, 1)
>
> O.engines = [
> ForceResetter(),
> InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb()]),
> InteractionLoop(
> # handle sphere+sphere and facet+sphere collisions
> [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
> [Ip2_FrictMat_FrictMat_FrictPhys()],
> [Law2_ScGeom_FrictPhys_CundallStrack()]),
> NewtonIntegrator(gravity=(-9.8, 0, 0), damping=0.001, label='down'),
> PyRunner(command="myRotation()",iterPeriod=40)
> # RotationEngine(rotationAxis=(0, 0, 1), angularVelocity=10.0,
> rotateAroundZero=True, zeroPoint=(0, 0, 0))
> ]
>
>
> --
> You received this question notification because your team yade-users is
> an answer contact for Yade.
>
> ___
> Mailing list: https://launchpad.net/~yade-users
> Post to : yade-users@lists.launchpad.net
> Unsubscribe : https://launchpad.net/~yade-users
> More help   : https://help.launchpad.net/ListHelp
>
>
>

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #686076]: Problem of Bodies rotation

2019-11-21 Thread Jan Stránský
Question #686076 on Yade changed:
https://answers.launchpad.net/yade/+question/686076

Status: Open => Answered

Jan Stránský proposed the following answer:
Hello,

I see 2 main options:
1) use RotationEngine
2) use a clump of facets instead of independent facets

cheers
Jan

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp