From d72f01bad4b535acdeb8cb6a5560fd4e0dc0cfab Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Sat, 10 Aug 2024 04:55:31 -0700 Subject: [PATCH] Add break statements in user_objects.cc to appease persnickety GCC PiperOrigin-RevId: 661590599 Change-Id: I2d167ca92cc4d5230922d221c9267a2e8d018b40 --- src/user/user_objects.cc | 125 +++++++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 52 deletions(-) diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index 310edcd8..88afaabe 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -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; } }