release 0.9.6
[debian/openrocket] / src / net / sf / openrocket / simulation / listeners / haisu / HaisuCatoListener.java
1 package net.sf.openrocket.simulation.listeners.haisu;
2
3 import net.sf.openrocket.aerodynamics.AerodynamicForces;
4 import net.sf.openrocket.aerodynamics.FlightConditions;
5 import net.sf.openrocket.simulation.SimulationStatus;
6 import net.sf.openrocket.simulation.listeners.AbstractSimulationListener;
7
8 public class HaisuCatoListener extends AbstractSimulationListener {
9
10         private static final double POSITION = 0.8;
11         private static final double CNA = 5.16;
12         
13         private final double alpha;
14
15         public HaisuCatoListener(double alpha) {
16                 this.alpha = alpha;
17         }
18         
19         @Override
20         public void forceCalculation(SimulationStatus status, FlightConditions conditions, 
21                         AerodynamicForces forces) {
22
23                 double cn = CNA * alpha;
24                 double cm = cn * POSITION / conditions.getRefLength();
25                 
26                 double theta = conditions.getTheta();
27                 double costheta = Math.cos(theta);
28                 
29                 forces.CN += cn * costheta;
30                 forces.Cm += cm * costheta;
31                 
32                 if (Math.abs(costheta) < 0.99) {
33                         System.err.println("THETA = "+(theta*180/Math.PI)+ " aborting...");
34                         System.exit(1);
35                 }
36         }
37
38 }