当前位置: 首页 > 知识库问答 >
问题:

计算/近似刚体上的速度和旋转冲量,只给出一个位置上的力和刚体的质心?

蒯胜泫
2023-03-14
// The velocity of the particle at the time of contact
float4 contactVelocity;

// The index of the shape that the particle collided with
int shapeIndex;

// The particle's position in the world (which should be the same as the contact point)
float3 pos;

// The mass of the particle
float mass;

// The shape's center of mass
float3 shapeOrigin;

// TODO: define ApplyVelForce & ApplyRotForce
velDelta[shapeIndex] = velDelta[shapeIndex] + GetVelForce(shapeOrigin, contactVelocity * mass, pos);
rotVelDelta[shapeIndex] = rotVelDelta[shapeIndex] + GetRotForce(shapeOrigin, contactVelocity * mass, pos);

// function definitions
float3 GetVelForce(float3 shapeCentroid, float3 force, float3 forcePoint){ /* TODO define */ }
float3 GetRotForce(float3 shapeCentroid, float3 force, float3 forcePoint){ /* TODO define */ }

如果有人知道一个相对简单的公式来合理高效地计算甚至近似这些速度和旋转力,请告诉我。我在谷歌搜索了一下,但所有关于这方面的文章似乎都超出了我的理解范围。我只是不认为我有足够的经验和知识的运动学,以计算公式,像这些我自己。

共有1个答案

柳奇希
2023-03-14

你想要的东西通常是不确定的,给出了你想要的信息作为输入。在一般情况下,您需要作为输入:

Input:

center of mass of shape : x_c (changes with time)
orientation of shape in space : U (orthogonal matrix, equivalent to a coordinate frame
                                    attached to and moving with the shape, 
                                    changes with time)
Force vector in world space : f (changes with time)
point of force in world space : x_F (changes with time)
inertia matrix of the shape : J (constant) 
mass of shape : m (constant)

Output:
Velocity of center of mass : v_c (changes with time)
Angular velocity of shape in world frame : o (changes with time)

一般而言,刚体在任何给定时刻在世界框架中的位置和方位的完整描述如下:

x_c = x_c(t), U = U(t)

其中u为3×3正交矩阵,其列是与刚体牢固附着并随刚体运动的坐标框架的3个单位向量的坐标,原点为x_c点。

point of force: 
x_F = x_c + U * X_F

force:
f = U*F

angular velocity (along the momentary axis of rotation):
o = U*O

运动方程是

d/dt(x_c) = v_c

d/dt(v_c) = U*F / m

d/dt (J*O) = cross(J*O, O) + U.T * cross(X_F, F)

d/dt U = U*matrix(O)

哪里

x_c = center of mass,  
v_c = velocity of center of mass,  
O = angular velocity in body fixed frame,  
U = 3 by 3 orthogonal a matrix with columns the 
    orientations of the axis of the body fixed system 
F = force in body-fixed frame
X_F = point of force in body fixed frame

因此,产生刚体运动的一个简单的迭代格式是

input:
x_c_in, v_c_in, U_in, O_in, J, m, X_F, F, h = time-step 

x_c_out = x_c_in + h*v_c_in
v_c_out = v_c_in + h*(U_in * F_in)/m
Rot_hO = rotate(h*O_in) 
        (perform rotation around axis determined by vector O and angle h*norm(O))
U_out = U_in * Rot_hO
O_out = O_in + h*inverse(J)*( cross(J*O_in, O_in) + cross(X_F, F) )

output:
x_c_out, v_c_out, U_out, O_out,
 类似资料:
  • 流氓和静态刚体 一般当我们创建一个刚体并将它添加到空间上后,空间就开始对之进行模拟,包括了对刚体位置、速度、受力以及重力影响等的模拟。没被添加到空间(没有被模拟)的刚体我们把它称之为流氓刚体。流氓刚体最重要的用途就是用来当作静态刚体,但是你仍然可以使用它来实现如移动平台这样的直接受控物体。 内存管理函数 cpBody *cpBodyAlloc(void) cpBody *cpBodyInit(cp

  • 刚体是组成物理世界的基本对象,可以让一个节点受到物理影响并产生反应。该组件在使用 Builtin 物理引擎时无效。 点击 属性检查器 下方的 添加组件 -> 物理组件 -> Rigid Body 3D,即可添加刚体组件到节点上。 刚体属性 属性 功能说明 Mass 刚体的质量 Linear Damping 线性阻尼,用于减小刚体的线性速率,值越大物体移动越慢 Angular Damping 角阻尼

  • 刚体是组成物理世界的基本对象,你可以将刚体想象成一个你不能看到(绘制)也不能摸到(碰撞)的带有属性的物体。 刚体属性 质量 刚体的质量是通过碰撞组件的 密度 与 大小 自动计算得到的。 当你需要计算物体应该受到多大的力时可能需要使用到这个属性。 var mass = rigidbody.getMass(); 移动速度 // 获取移动速度 var velocity = rigidbody.line

  • 获取刚体组件 TypeScript的代码示例:const rigidBody = this.getComponent(RigidBody); 刚体类型 刚体一般分为三种类型,static,dynamic,kinematic. static,表示静态刚体,犹如质量巨大无比的石头,具体为质量为0的,或者只有碰撞组件的物理元素。 dynamic,表示动力学刚体,能够受到力的作用,具体为质量大于0并且is

  • 所以在我修复了'415媒体不支持'错误(415媒体不支持)之后,我遇到了一个新问题。我的请求体总是空的。当我通过ChromePostMan发送请求时,我总是得到一个只有空值的序列化实体。我正在使用,和。我在我的项目中使用基于注释的配置(使Spring自动发现)。 其他职位 我知道stackoverflow上的其他帖子,几乎有同样的问题。然而,他们没有给我一个答案。此外,大多数帖子都是针对较旧的Sp

  • 我有一个模型类和一个控制器。我在post man的正文中发布json类型的数据。但每次我都会收到一个不受支持的媒体类型415错误。这是我的模型课: 我的控制器是: 我已经用HttpServletRequest代替@RequestBody,它起到了作用。但为什么在我使用@RequestBody时它不工作呢? 这是邮递员的快照。这是邮递员请求的图片 这是请求中使用的标题的屏幕截图