Add break statements in user_objects.cc to appease persnickety GCC
PiperOrigin-RevId: 661590599 Change-Id: I2d167ca92cc4d5230922d221c9267a2e8d018b40
This commit is contained in:
committed by
Copybara-Service
parent
e397fcb5a5
commit
d72f01bad4
+73
-52
@@ -2074,41 +2074,43 @@ double mjCGeom::GetVolume() const {
|
||||
// compute from geom shape (type) and inertia (typeinertia)
|
||||
switch (type) {
|
||||
case mjGEOM_SPHERE: {
|
||||
double radius = size[0];
|
||||
switch (typeinertia) {
|
||||
case mjINERTIA_SHELL: {
|
||||
return 4 * mjPI * size[0] * size[0];
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
return 4 * mjPI * size[0] * size[0] * size[0] / 3;
|
||||
}
|
||||
case mjINERTIA_SHELL:
|
||||
return 4 * mjPI * radius * radius;
|
||||
break;
|
||||
case mjINERTIA_VOLUME:
|
||||
return 4 * mjPI * radius * radius * radius / 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case mjGEOM_CAPSULE: {
|
||||
double height = 2 * size[1];
|
||||
double radius = size[0];
|
||||
switch (typeinertia) {
|
||||
case mjINERTIA_SHELL: {
|
||||
double radius = size[0];
|
||||
double height = 2 * size[1];
|
||||
case mjINERTIA_SHELL:
|
||||
return 4 * mjPI * radius * radius + 2 * mjPI * radius * height;
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
double height = 2 * size[1];
|
||||
return mjPI * (size[0] * size[0] * height + 4 * size[0] * size[0] * size[0] / 3);
|
||||
}
|
||||
break;
|
||||
case mjINERTIA_VOLUME:
|
||||
return mjPI * (radius * radius * height + 4 * radius * radius * radius / 3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case mjGEOM_CYLINDER: {
|
||||
double height = 2 * size[1];
|
||||
double radius = size[0];
|
||||
switch (typeinertia) {
|
||||
case mjINERTIA_SHELL: {
|
||||
double radius = size[0];
|
||||
double height = 2 * size[1];
|
||||
case mjINERTIA_SHELL:
|
||||
return 2 * mjPI * radius * radius + 2 * mjPI * radius * height;
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
double height = 2 * size[1];
|
||||
return mjPI * size[0] * size[0] * height;
|
||||
}
|
||||
break;
|
||||
case mjINERTIA_VOLUME:
|
||||
return mjPI * radius * radius * height;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case mjGEOM_ELLIPSOID: {
|
||||
switch (typeinertia) {
|
||||
case mjINERTIA_SHELL: {
|
||||
@@ -2119,24 +2121,26 @@ double mjCGeom::GetVolume() const {
|
||||
mju_pow(size[1] * size[2], p) +
|
||||
mju_pow(size[2] * size[0], p);
|
||||
return 4 * mjPI * mju_pow(tmp / 3, 1 / p);
|
||||
break;
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
case mjINERTIA_VOLUME:
|
||||
return 4 * mjPI * size[0] * size[1] * size[2] / 3;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case mjGEOM_HFIELD:
|
||||
case mjGEOM_BOX: {
|
||||
switch (typeinertia) {
|
||||
case mjINERTIA_SHELL: {
|
||||
case mjINERTIA_SHELL:
|
||||
return 8 * (size[0] * size[1] + size[1] * size[2] + size[2] * size[0]);
|
||||
}
|
||||
|
||||
case mjINERTIA_VOLUME: {
|
||||
break;
|
||||
case mjINERTIA_VOLUME:
|
||||
return size[0] * size[1] * size[2] * 8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@@ -2175,16 +2179,17 @@ void mjCGeom::SetInertia(void) {
|
||||
switch (type) {
|
||||
case mjGEOM_SPHERE: {
|
||||
switch (typeinertia) {
|
||||
case mjINERTIA_SHELL: {
|
||||
case mjINERTIA_SHELL:
|
||||
inertia[0] = inertia[1] = inertia[2] = 2 * mass_ * size[0] * size[0] / 3;
|
||||
return;
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
break;
|
||||
case mjINERTIA_VOLUME:
|
||||
inertia[0] = inertia[1] = inertia[2] = 2 * mass_ * size[0] * size[0] / 5;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case mjGEOM_CAPSULE: {
|
||||
double halfheight = size[1];
|
||||
double height = 2 * size[1];
|
||||
@@ -2212,6 +2217,7 @@ void mjCGeom::SetInertia(void) {
|
||||
inertia[1] += sphere_inertia + sphere_mass * (hs_pos * hs_pos - hs_com * hs_com);
|
||||
inertia[2] += sphere_inertia;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
double sphere_mass =
|
||||
@@ -2228,9 +2234,11 @@ void mjCGeom::SetInertia(void) {
|
||||
inertia[1] += sphere_inertia + sphere_mass * height * (3 * radius + 2 * height) / 8;
|
||||
inertia[2] += sphere_inertia;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case mjGEOM_CYLINDER: {
|
||||
double halfheight = size[1];
|
||||
double height = 2 * halfheight;
|
||||
@@ -2260,19 +2268,23 @@ void mjCGeom::SetInertia(void) {
|
||||
inertia[1] += 2 * inertia_disk_x;
|
||||
inertia[2] += 2 * inertia_disk_z;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
case mjINERTIA_VOLUME:
|
||||
inertia[0] = inertia[1] = mass_ * (3 * radius * radius + height * height) / 12;
|
||||
inertia[2] = mass_ * radius * radius / 2;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case mjGEOM_ELLIPSOID: {
|
||||
double s00 = size[0] * size[0];
|
||||
double s11 = size[1] * size[1];
|
||||
double s22 = size[2] * size[2];
|
||||
switch (typeinertia) {
|
||||
case mjINERTIA_SHELL: {
|
||||
// approximate shell inertia by subtracting ellipsoid from expanded
|
||||
// ellipsoid
|
||||
// approximate shell inertia by subtracting ellipsoid from expanded ellipsoid
|
||||
double eps = 1e-6;
|
||||
|
||||
// solid volume (a)
|
||||
@@ -2290,9 +2302,9 @@ void mjCGeom::SetInertia(void) {
|
||||
// inertia
|
||||
double mass_a = Va * density;
|
||||
double inertia_a[3];
|
||||
inertia_a[0] = mass_a * (size[1] * size[1] + size[2] * size[2]) / 5;
|
||||
inertia_a[1] = mass_a * (size[0] * size[0] + size[2] * size[2]) / 5;
|
||||
inertia_a[2] = mass_a * (size[0] * size[0] + size[1] * size[1]) / 5;
|
||||
inertia_a[0] = mass_a * (s11 + s22) / 5;
|
||||
inertia_a[1] = mass_a * (s00 + s22) / 5;
|
||||
inertia_a[2] = mass_a * (s00 + s11) / 5;
|
||||
|
||||
double mass_b = Vb * density;
|
||||
double inertia_b[3];
|
||||
@@ -2303,17 +2315,23 @@ void mjCGeom::SetInertia(void) {
|
||||
// shell inertia
|
||||
mju_sub3(inertia, inertia_b, inertia_a);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
inertia[0] = mass_ * (size[1] * size[1] + size[2] * size[2]) / 5;
|
||||
inertia[1] = mass_ * (size[0] * size[0] + size[2] * size[2]) / 5;
|
||||
inertia[2] = mass_ * (size[0] * size[0] + size[1] * size[1]) / 5;
|
||||
inertia[0] = mass_ * (s11 + s22) / 5;
|
||||
inertia[1] = mass_ * (s00 + s22) / 5;
|
||||
inertia[2] = mass_ * (s00 + s11) / 5;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case mjGEOM_HFIELD:
|
||||
case mjGEOM_BOX: {
|
||||
double s00 = size[0] * size[0];
|
||||
double s11 = size[1] * size[1];
|
||||
double s22 = size[2] * size[2];
|
||||
switch (typeinertia) {
|
||||
case mjINERTIA_SHELL: {
|
||||
// length
|
||||
@@ -2346,22 +2364,25 @@ void mjCGeom::SetInertia(void) {
|
||||
double Iz2 = mass2 * lx * lx / 12;
|
||||
|
||||
// total inertia
|
||||
inertia[0] = 2 * (Ix0 + mass0 * size[2] * size[2] + Ix1 + Ix2 + mass2 * size[1] * size[1]);
|
||||
inertia[1] = 2 * (Iy0 + mass0 * size[2] * size[2] + Iy1 + mass1 * size[0] * size[0] + Iy2);
|
||||
inertia[2] = 2 * (Iz0 + Iz1 + mass1 * size[0] * size[0] + Iz2 + mass2 * size[1] * size[1]);
|
||||
inertia[0] = 2 * (mass0 * s22 + mass2 * s11 + Ix0 + Ix1 + Ix2);
|
||||
inertia[1] = 2 * (mass0 * s22 + mass1 * s00 + Iy0 + Iy1 + Iy2);
|
||||
inertia[2] = 2 * (mass1 * s00 + mass2 * s11 + Iz0 + Iz1 + Iz2);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case mjINERTIA_VOLUME: {
|
||||
inertia[0] = mass_ * (size[1] * size[1] + size[2] * size[2]) / 3;
|
||||
inertia[1] = mass_ * (size[0] * size[0] + size[2] * size[2]) / 3;
|
||||
inertia[2] = mass_ * (size[0] * size[0] + size[1] * size[1]) / 3;
|
||||
inertia[0] = mass_ * (s11 + s22) / 3;
|
||||
inertia[1] = mass_ * (s00 + s22) / 3;
|
||||
inertia[2] = mass_ * (s00 + s11) / 3;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
default:
|
||||
inertia[0] = inertia[1] = inertia[2] = 0;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
inertia[0] = inertia[1] = inertia[2] = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user