Войти
ПрограммированиеФорумФизика

угловое ускорение в рамках кватерниона

#0
11:06, 11 авг. 2019

подскажите пожалста, как правильно посчитать параметры для углового ускорения кватерниону

с позицией можно сделать так:

procedure Update(const Target: TD3DVector4);
var
 force,acc:TD3DVector4;
begin
    force:= (target - pos) * v_stiffness; //сила = конечная точка минус текущее положение * упругость   
    acc:= force / v_mass; //ускорение = сила / масса
    vel:= (vel + acc) * v_damping; //добавляем к скорости ускорение и монжим на торможение
    pos:= pos + vel; //смещаем положение
end;

с кватернионом теоретически можно пробовать тоже делать с вектором не трогая скаляр, но из за нормализации этот вектор не будет расти и адекватно работать. как правильно сделать это  сним?


#1
16:03, 11 авг. 2019

кажется разобрался

procedure TFlexRotationVertex.Update(const Target: TD3DQuaternion; deltaTime:single);
var
 deltaRotation,qw:TD3DQuaternion;
 angle,f:single;
 Axis :TD3DVector4;
begin
    v_damping:=0.25;
    v_mass:=0.25;
    deltaRotation := CurrentRotation.Inversed * Target;
    deltaRotation.ToAngleAxis(angle,Axis.v3);

    //  AngularVel = AngularVel + Axis * t
    f:= angle * deltaTime / v_mass;
    AngularVel:=TD3DVector4.MADDF(AngularVel,Axis,f) * v_damping;
    
    angle:=AngularVel.VectorLength * v_stiffness;
    if angle>0.001 then begin
      qw:=TD3DQuaternion.FromAngleAxisS(angle,AngularVel);      
    end else begin
      qw:=TD3DQuaternion.IdentityQuaternion;
    end;

    CurrentRotation:= qw * CurrentRotation;
end;

ПрограммированиеФорумФизика

Тема закрыта.