Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二维惯性张量的计算_C++_Physics_Scientific Computing - Fatal编程技术网

C++ 二维惯性张量的计算

C++ 二维惯性张量的计算,c++,physics,scientific-computing,C++,Physics,Scientific Computing,我在研究如何找到二维形状的惯性。此形状的轮廓与多个点啮合,每个点的x和y坐标已知 我知道Ixx,Iyy和Ixy的表达式,但身体没有质量。如何继续?对于任何形状,都需要将其拆分为三角形,并分别处理每个三角形。最后,使用以下规则组合结果 总体 %所有三角形的合并总面积 总面积=总和(面积(i),i=1:n) 总质量=总和(质量(i),i=1:n) %组合质心(质心)坐标 组合质心×总和(质量(i)*质心×i,i=1:n)/总质量 组合质心=总和(质量(i)*质心(i),i=1:n)/总质量 %到三角

我在研究如何找到二维形状的惯性。此形状的轮廓与多个点啮合,每个点的x和y坐标已知


我知道
Ixx
Iyy
Ixy
的表达式,但身体没有质量。如何继续?

对于任何形状,都需要将其拆分为三角形,并分别处理每个三角形。最后,使用以下规则组合结果

总体

%所有三角形的合并总面积
总面积=总和(面积(i),i=1:n)
总质量=总和(质量(i),i=1:n)
%组合质心(质心)坐标
组合质心×总和(质量(i)*质心×i,i=1:n)/总质量
组合质心=总和(质量(i)*质心(i),i=1:n)/总质量
%到三角形的每个距离(平方)
质心距离(i)=质心x(i)*质心x(i)+质心y(i)*质心y(i)
%组合质量惯性矩
组合_mmoi=总和(mmoi(i)+质量(i)*质心_距离_sq(i),i=1:n)
现在为每个三角形设置。

考虑具有向量坐标的三个角点,即点A、点B和点C

以及以下点积和叉积(标量)组合

a·a = ax*ax+ay*ay
b·b = bx*bx+by*by
c·c = cx*cx+cy*cy
a·b = ax*bx+ay*by
b·c = bx*cx+by*cy
c·a = cx*ax+cy*ay
a×b = ax*by-ay*bx
b×c = bx*cy-by*cx
c×a = cx*ay-cy*ax
三角形的性质是(厚度和质量密度)

按组成部分,上述内容如下:

area(i) = 1/2*ABS( ax*(by-cy)+ay*(cx-bx)+bx*cy-by*cx)
mmoi(i) = mass(i)/6*(ax^2+ax*(bx+cx)+bx^2+bx*cx+cx^2+ay^2+ay*(by+cy)+by^2+by*cy+cy^2)
附录

这里有一点理论。每个三角形的面积是使用

Area = 1/2 * || (b-a) × (c-b) ||
其中,
×
是向量叉积,
| |||是向量范数(长度函数)

三角形由两个变量
t
s
参数化,使得二重积分
A=INT(INT(1,dx),dy)
给出总面积

% position r(s,t) = [x,y]
[x,y] = [ax,ay] + t*[bx-ax, by-zy] + t*s*[cx-bx,cy-by]

% gradient directions along s and t
(dr/dt) = [bx-ax,by-ay] + s*[cx-bx,cy-by]
(dr/ds) = t*[cx-bx,cy-by]

% Integration area element
dA = || (dr/ds)×(dr/dt) || = (2*A*t)*ds*dt
%
%   where A = 1/2*||(b-a)×(c-b)||

% Check that the integral returns the area
Area = INT( INT( 2*A*t,s=0..1), t=0..1) = 2*A*(1/2) = A

% Mass moment of inertia components

         /  /  /  | y^2+z^2  -x*y    -x*z   |
I = 2*m*|  |  | t*|  -x*y   x^2+z^2  -y*z   | dz ds dt
        /  /  /   |  -x*z    -y*z   x^2+y^2 |

% where [x,y] are defined from the parametrization

我认为你把面积矩
INT(y^2 dA)
和质量惯性矩
INT(ρ(y^2+x^2)dA)
混淆了。请提供更多详细信息,说明如何使用此功能,以及您已经采取了哪些步骤。如果它没有质量,那么它就没有质量惯性矩。但是它会有面积力矩(用于弯曲刚度)。Hay ja72,谢谢你的帮助,实际上我的系统是振荡的,我的目标是利用转动惯量来找到旋转轴,我的系统是2D的,我有他周长所有点的坐标,但他没有,他没有任何质量。MMOI没有计算旋转轴。也许你可以先问一下数学,然后再问一下算法。查看从运动中找到旋转点的方法。或者询问如何找到三角形的面积、质心和面积极矩。然后把你的形状分割成三角形,用构图规则把它们加起来。好的,谢谢ja72。谢谢ja72,我会试试的,在质心中,x(I)应该是
质心x(I)=1/3*(ax+bx+cx)
。为什么没有质量分布?你需要一个面积密度来将面积转换成质量。如果物体具有恒定的厚度
t
,则
mass=rho*t*面积
,其中
rho
是质量密度(质量/体积)。在上述代码中,将每个面积乘以
rho(i)*t(i)
得到每个质量。参见post EditsHanks ja72,我尝试了你的算法,但它给了我
mmoi(I)=0
,因为我有一个以(0,0)为中心的2D形状,所以我选择
a=[x_质量中心,y_质量中心];b[x(i),y(i)];c[x(i+1),y(i+1)]
我误解了什么吗?如果
a=[0,0]
b=[bx,by]
c=[cx,cy]
然后
mmoi=m/6*(bx^2+bx*cx+by^2+cy^2)
展开组件时。这不应该是零。我在
a=[ax,ay]
时编辑了答案,以按组件显示一般表达式。
Area = 1/2 * || (b-a) × (c-b) ||
% position r(s,t) = [x,y]
[x,y] = [ax,ay] + t*[bx-ax, by-zy] + t*s*[cx-bx,cy-by]

% gradient directions along s and t
(dr/dt) = [bx-ax,by-ay] + s*[cx-bx,cy-by]
(dr/ds) = t*[cx-bx,cy-by]

% Integration area element
dA = || (dr/ds)×(dr/dt) || = (2*A*t)*ds*dt
%
%   where A = 1/2*||(b-a)×(c-b)||

% Check that the integral returns the area
Area = INT( INT( 2*A*t,s=0..1), t=0..1) = 2*A*(1/2) = A

% Mass moment of inertia components

         /  /  /  | y^2+z^2  -x*y    -x*z   |
I = 2*m*|  |  | t*|  -x*y   x^2+z^2  -y*z   | dz ds dt
        /  /  /   |  -x*z    -y*z   x^2+y^2 |

% where [x,y] are defined from the parametrization