1 package net.sf.openrocket.simulation.listeners.haisu;
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;
8 public class HaisuCatoListener extends AbstractSimulationListener {
10 private static final double POSITION = 0.8;
11 private static final double CNA = 5.16;
13 private final double alpha;
15 public HaisuCatoListener(double alpha) {
20 public void forceCalculation(SimulationStatus status, FlightConditions conditions,
21 AerodynamicForces forces) {
23 double cn = CNA * alpha;
24 double cm = cn * POSITION / conditions.getRefLength();
26 double theta = conditions.getTheta();
27 double costheta = Math.cos(theta);
29 forces.CN += cn * costheta;
30 forces.Cm += cm * costheta;
32 if (Math.abs(costheta) < 0.99) {
33 System.err.println("THETA = "+(theta*180/Math.PI)+ " aborting...");