From 529f2acb0ead1ff063cb07346cdb2c2313da5a50 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Wed, 23 May 2012 14:23:01 +0000 Subject: [PATCH] My assessment of why IntegrationTest was failing was incorrect. After perusing the history I found that in repository revision 599, I introduced changes to the computation of Transition volume which accounted for the volume of the shoulders as well as the body of the transition. This change broke the computation of CG. This commit reverts IntegrationTest and adds some cg tests to SymmetricComponentVolumeTest which contains the values produced by the old code. A future commit will correct SymmetricComponent.getCG and all these tests will work again. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@713 180e2498-e6e9-4542-8430-84ac67f01cd8 --- .../net/sf/openrocket/IntegrationTest.java | 49 ++++++------ .../SymmetricComponentVolumeTest.java | 79 +++++++++++++++---- 2 files changed, 89 insertions(+), 39 deletions(-) diff --git a/core/test/net/sf/openrocket/IntegrationTest.java b/core/test/net/sf/openrocket/IntegrationTest.java index ef41c0ca..b06a6c34 100644 --- a/core/test/net/sf/openrocket/IntegrationTest.java +++ b/core/test/net/sf/openrocket/IntegrationTest.java @@ -105,8 +105,8 @@ public class IntegrationTest extends BaseTestCase { // Compute cg+cp + altitude - checkCgCp(0.238, 0.0678, 0.320, 12.0); - checkAlt(44.2); + checkCgCp(0.248, 0.0645, 0.320, 12.0); + checkAlt(48.2); // Mass modification @@ -117,8 +117,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.223, 0.0778, 0.320, 12.0); - checkAlt(34.2); + checkCgCp(0.230, 0.0745, 0.320, 12.0); + checkAlt(37.2); // Non-change @@ -134,7 +134,7 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp - checkCgCp(0.223, 0.0778, 0.320, 12.0); + checkCgCp(0.230, 0.0745, 0.320, 12.0); // Aerodynamic modification @@ -156,8 +156,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.223, 0.0778, 0.320, 12.0); - checkAlt(34.0); + checkCgCp(0.230, 0.0745, 0.320, 12.0); + checkAlt(37.2); // Undo "Name change" change @@ -167,7 +167,7 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp - checkCgCp(0.223, 0.0778, 0.320, 12.0); + checkCgCp(0.230, 0.0745, 0.320, 12.0); // Undo "Modify mass" change @@ -177,8 +177,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.238, 0.0678, 0.320, 12.0); - checkAlt(44.3); + checkCgCp(0.248, 0.0645, 0.320, 12.0); + checkAlt(48.2); // Redo "Modify mass" change @@ -188,8 +188,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.223, 0.0778, 0.320, 12.0); - checkAlt(34.3); + checkCgCp(0.230, 0.0745, 0.320, 12.0); + checkAlt(37.2); // Mass modification @@ -200,8 +200,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.216, 0.0828, 0.320, 12.0); - checkAlt(30.2); + checkCgCp(0.223, 0.0795, 0.320, 12.0); + checkAlt(32.7); // Perform component movement @@ -219,8 +219,9 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.215, 0.0830, 0.320, 12.0); - checkAlt(30.2); + checkCgCp(0.221, 0.0797, 0.320, 12.0); + checkAlt(32.7); + // Modify mass without setting undo description massComponent().setComponentMass(0.020); @@ -228,8 +229,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.209, 0.088, 0.320, 12.0); - checkAlt(26.8); + checkCgCp(0.215, 0.0847, 0.320, 12.0); + checkAlt(29.0); // Undo "Modify mass2" change @@ -239,8 +240,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.215, 0.0830, 0.320, 12.0); - checkAlt(30.2); + checkCgCp(0.221, 0.0797, 0.320, 12.0); + checkAlt(32.7); // Undo "Move component" change @@ -250,8 +251,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.216, 0.0828, 0.320, 12.0); - checkAlt(30.4); + checkCgCp(0.223, 0.0795, 0.320, 12.0); + checkAlt(32.7); // Redo "Move component" change @@ -261,8 +262,8 @@ public class IntegrationTest extends BaseTestCase { // Check cg+cp + altitude - checkCgCp(0.215, 0.0830, 0.320, 12.0); - checkAlt(30.2); + checkCgCp(0.221, 0.0797, 0.320, 12.0); + checkAlt(32.7); } diff --git a/core/test/net/sf/openrocket/rocketcomponent/SymmetricComponentVolumeTest.java b/core/test/net/sf/openrocket/rocketcomponent/SymmetricComponentVolumeTest.java index e539a84e..b1444548 100644 --- a/core/test/net/sf/openrocket/rocketcomponent/SymmetricComponentVolumeTest.java +++ b/core/test/net/sf/openrocket/rocketcomponent/SymmetricComponentVolumeTest.java @@ -2,6 +2,7 @@ package net.sf.openrocket.rocketcomponent; import static org.junit.Assert.assertEquals; import net.sf.openrocket.material.Material; +import net.sf.openrocket.util.Coordinate; import net.sf.openrocket.util.BaseTestCase.BaseTestCase; import org.junit.Test; @@ -21,7 +22,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setAftRadius(1.0); nc.setMaterial( new Material.Bulk("test",density,true)); - System.out.println( nc.getComponentVolume() ); + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); double volume = Math.PI / 3.0; @@ -31,6 +33,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 0.75, cg.x, epsilonPercent * 0.75 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -49,8 +55,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setAftShoulderThickness(1.0); nc.setMaterial( new Material.Bulk("test",density,true)); - - System.out.println( nc.getComponentVolume() + "\t" + nc.getMass() ); + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); double volume = Math.PI / 3.0; volume += Math.PI; @@ -61,6 +67,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 1.312, cg.x, epsilonPercent * 1.071 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -76,8 +86,9 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setType( Transition.Shape.CONICAL ); nc.setMaterial( new Material.Bulk("test",density,true)); - System.out.println( nc.getComponentVolume() ); - + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); + double volume = Math.PI / 3.0; // outer volume // manually projected Thickness of 0.5 on to radius to determine @@ -94,6 +105,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 0.7454, cg.x, epsilonPercent * 0.7454 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -112,8 +127,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setAftShoulderThickness(0.5); nc.setMaterial( new Material.Bulk("test",density,true)); - - System.out.println( nc.getComponentVolume() ); + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); double volume = Math.PI / 3.0; // outer volume @@ -134,6 +149,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 1.2719, cg.x, epsilonPercent * 1.2719 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -150,8 +169,9 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setAftRadius(2.0); nc.setMaterial( new Material.Bulk("test",density,true)); - System.out.println( nc.getComponentVolume() ); - + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); + double volume = Math.PI / 3.0 * (2.0*2.0 + 2.0 * 1.0 + 1.0 * 1.0) * 4.0; double mass = density * volume; @@ -160,6 +180,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 2.4285, cg.x, epsilonPercent * 2.4285 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -182,8 +206,9 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setForeShoulderThickness(1.0); nc.setMaterial( new Material.Bulk("test",density,true)); - System.out.println( nc.getComponentVolume() ); - + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); + double volume = Math.PI / 3.0 * (2.0*2.0 + 2.0 * 1.0 + 1.0 * 1.0) * 4.0; // plus aft shoulder: volume += Math.PI * 1.0 * 2.0 * 2.0; @@ -196,6 +221,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 2.8023, cg.x, epsilonPercent * 2.8023 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -212,7 +241,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setThickness(0.5); nc.setMaterial( new Material.Bulk("test",density,true)); - System.out.println( nc.getComponentVolume() ); + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); // Volume of filled transition = double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0; @@ -237,6 +267,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 0.5884, cg.x, epsilonPercent * 0.5884 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -259,7 +293,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setForeShoulderThickness(0.5); // note this means fore shoulder is filled. nc.setMaterial( new Material.Bulk("test",density,true)); - System.out.println( nc.getComponentVolume() ); + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); // Volume of filled transition = double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0; @@ -289,6 +324,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 0.8581, cg.x, epsilonPercent * 0.8581 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -305,7 +344,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setThickness(0.25); nc.setMaterial( new Material.Bulk("test",density,true)); - System.out.println( nc.getComponentVolume() ); + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); // Volume of filled transition = double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0; @@ -330,6 +370,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 0.56827, cg.x, epsilonPercent * 0.56827 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } @Test @@ -353,7 +397,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { nc.setMaterial( new Material.Bulk("test",density,true)); - System.out.println( nc.getComponentVolume() ); + System.out.println( nc.getComponentVolume() + "\t" + nc.getMass()); + System.out.println(nc.getCG()); // Volume of filled transition = double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0; @@ -384,6 +429,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); + Coordinate cg = nc.getCG(); + + assertEquals( 0.7829, cg.x, epsilonPercent * 0.7829 ); + assertEquals( mass, cg.weight, epsilonPercent * mass); } } -- 2.47.2