// 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
// 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
// Check cg+cp
- checkCgCp(0.223, 0.0778, 0.320, 12.0);
+ checkCgCp(0.230, 0.0745, 0.320, 12.0);
// Aerodynamic modification
// 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
// 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
// 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
// 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
// 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
// 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);
// 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
// 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
// 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
// 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);
}
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;
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;
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
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;
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
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
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
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
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
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;
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
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;
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
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;
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
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;
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
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;
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
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;
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);
}
}