1 package net.sf.openrocket.rocketcomponent;
3 import static org.junit.Assert.assertEquals;
4 import net.sf.openrocket.material.Material;
5 import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
9 public class SymmetricComponentVolumeTest extends BaseTestCase {
12 public void simpleConeFilled() {
13 NoseCone nc = new NoseCone();
15 final double epsilonPercent = 0.001;
16 final double density = 2.0;
20 nc.setType( Transition.Shape.CONICAL );
22 nc.setMaterial( new Material.Bulk("test",density,true));
24 System.out.println( nc.getComponentVolume() );
26 double volume = Math.PI / 3.0;
28 double mass = density * volume;
30 System.out.println( volume );
32 assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
33 assertEquals( mass, nc.getMass(), epsilonPercent * mass );
37 public void simpleConeHollow() {
38 NoseCone nc = new NoseCone();
40 final double epsilonPercent = 0.001;
41 final double density = 2.0;
46 nc.setType( Transition.Shape.CONICAL );
47 nc.setMaterial( new Material.Bulk("test",density,true));
49 System.out.println( nc.getComponentVolume() );
51 double volume = Math.PI / 3.0; // outer volume
53 // manually projected Thickness of 0.5 on to radius to determine
54 // the innerConeDimen. Since the outer cone is "square" (height = radius),
55 // we only need to compute this one dimension in order to compute the
56 // volume of the inner cone.
57 double innerConeDimen = 1.0 - Math.sqrt(2.0) / 2.0;
58 double innerVolume = Math.PI / 3.0 * innerConeDimen * innerConeDimen * innerConeDimen;
59 volume -= innerVolume;
61 double mass = density * volume;
63 System.out.println( volume );
65 assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
66 assertEquals( mass, nc.getMass(), epsilonPercent * mass );
70 public void simpleConeWithShoulderFilled() {
71 NoseCone nc = new NoseCone();
73 final double epsilonPercent = 0.001;
74 final double density = 2.0;
78 nc.setType( Transition.Shape.CONICAL );
80 nc.setAftShoulderRadius(1.0);
81 nc.setAftShoulderLength(1.0);
82 nc.setMaterial( new Material.Bulk("test",density,true));
85 System.out.println( nc.getComponentVolume() );
87 double volume = Math.PI / 3.0;
90 double mass = density * volume;
92 System.out.println( volume );
95 //assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
96 assertEquals( mass, nc.getMass(), epsilonPercent * mass );
100 public void simpleTransitionFilled() {
101 Transition nc = new Transition();
103 final double epsilonPercent = 0.001;
104 final double density = 2.0;
108 nc.setType( Transition.Shape.CONICAL );
109 nc.setForeRadius(1.0);
110 nc.setAftRadius(2.0);
111 nc.setMaterial( new Material.Bulk("test",density,true));
113 System.out.println( nc.getComponentVolume() );
115 double volume = Math.PI / 3.0 * (2.0*2.0 + 2.0 * 1.0 + 1.0 * 1.0) * 4.0;
117 double mass = density * volume;
119 System.out.println( volume );
121 assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
122 assertEquals( mass, nc.getMass(), epsilonPercent * mass );
126 public void simpleTransitionHollow1() {
127 Transition nc = new Transition();
129 final double epsilonPercent = 0.001;
130 final double density = 2.0;
133 nc.setType( Transition.Shape.CONICAL );
134 nc.setForeRadius(0.5);
135 nc.setAftRadius(1.0);
136 nc.setThickness(0.5);
137 nc.setMaterial( new Material.Bulk("test",density,true));
139 System.out.println( nc.getComponentVolume() );
141 // Volume of filled transition =
142 double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0;
144 // magic 2D cad drawing...
146 // Since the thickness >= fore radius, the
147 // hollowed out portion of the transition
149 // the dimensions of this cone were determined
150 // using a 2d cad tool.
152 double innerConeRadius = 0.441;
153 double innerConeLength = 0.882;
154 double innerVolume = Math.PI /3.0 * innerConeLength * innerConeRadius * innerConeRadius;
156 double volume = filledVolume - innerVolume;
158 double mass = density * volume;
160 System.out.println( volume );
162 assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
163 assertEquals( mass, nc.getMass(), epsilonPercent * mass );
167 public void simpleTransitionHollow2() {
168 Transition nc = new Transition();
170 final double epsilonPercent = 0.001;
171 final double density = 2.0;
174 nc.setType( Transition.Shape.CONICAL );
175 nc.setForeRadius(0.5);
176 nc.setAftRadius(1.0);
177 nc.setThickness(0.25);
178 nc.setMaterial( new Material.Bulk("test",density,true));
180 System.out.println( nc.getComponentVolume() );
182 // Volume of filled transition =
183 double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0;
185 // magic 2D cad drawing...
187 // Since the thickness < fore radius, the
188 // hollowed out portion of the transition
189 // forms a transition.
190 // the dimensions of this transition were determined
191 // using a 2d cad tool.
193 double innerTransitionAftRadius = 0.7205;
194 double innerTransitionForeRadius = 0.2205;
195 double innerVolume = Math.PI /3.0 * ( innerTransitionAftRadius * innerTransitionAftRadius + innerTransitionAftRadius * innerTransitionForeRadius + innerTransitionForeRadius * innerTransitionForeRadius);
197 double volume = filledVolume - innerVolume;
199 double mass = density * volume;
201 System.out.println( volume );
203 assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
204 assertEquals( mass, nc.getMass(), epsilonPercent * mass );