@@ -517,9 +517,13 @@ def evaluate_center_of_pressure(self):
517517 # Calculate total lift coefficient derivative and center of pressure
518518 if len (self .aerodynamic_surfaces ) > 0 :
519519 for aero_surface , position in self .aerodynamic_surfaces :
520- self .total_lift_coeff_der += aero_surface .clalpha
521- self .cp_position += aero_surface .clalpha * (
522- position - self ._csys * aero_surface .cpz
520+ # ref_factor corrects lift for different reference areas
521+ ref_factor = (aero_surface .rocket_radius / self .radius ) ** 2
522+ self .total_lift_coeff_der += ref_factor * aero_surface .clalpha
523+ self .cp_position += (
524+ ref_factor
525+ * aero_surface .clalpha
526+ * (position - self ._csys * aero_surface .cpz )
523527 )
524528 self .cp_position /= self .total_lift_coeff_der
525529
@@ -871,7 +875,9 @@ def add_tail(
871875 self .add_surfaces (tail , position )
872876 return tail
873877
874- def add_nose (self , length , kind , position , bluffness = 0 , name = "Nose Cone" ):
878+ def add_nose (
879+ self , length , kind , position , bluffness = 0 , name = "Nose Cone" , base_radius = None
880+ ):
875881 """Creates a nose cone, storing its parameters as part of the
876882 aerodynamic_surfaces list. Its parameters are the axial position
877883 along the rocket and its derivative of the coefficient of lift
@@ -894,6 +900,9 @@ def add_nose(self, length, kind, position, bluffness=0, name="Nose Cone"):
894900 the radius of the base of the ogive.
895901 name : string
896902 Nose cone name. Default is "Nose Cone".
903+ base_radius : int, float, optional
904+ Nose cone base radius in meters. If not given, the rocket radius
905+ will be used.
897906
898907 See Also
899908 --------
@@ -907,8 +916,8 @@ def add_nose(self, length, kind, position, bluffness=0, name="Nose Cone"):
907916 nose = NoseCone (
908917 length = length ,
909918 kind = kind ,
910- base_radius = self .radius ,
911- rocket_radius = self .radius ,
919+ base_radius = base_radius or self .radius ,
920+ rocket_radius = base_radius or self .radius ,
912921 bluffness = bluffness ,
913922 name = name ,
914923 )
@@ -983,8 +992,9 @@ def add_trapezoidal_fins(
983992 with its base perpendicular to the rocket's axis. Cannot be used in
984993 conjunction with sweep_length.
985994 radius : int, float, optional
986- Reference radius to calculate lift coefficient. If None, which is
987- default, use rocket radius.
995+ Reference fuselage radius where the fins are located. This is used
996+ to calculate lift coefficient and to draw the rocket. If None,
997+ which is default, the rocket radius will be used.
988998 airfoil : tuple, optional
989999 Default is null, in which case fins will be treated as flat plates.
9901000 Otherwise, if tuple, fins will be considered as airfoils. The
@@ -1064,8 +1074,9 @@ def add_elliptical_fins(
10641074 Fins cant angle with respect to the rocket centerline. Must be given
10651075 in degrees.
10661076 radius : int, float, optional
1067- Reference radius to calculate lift coefficient. If None, which
1068- is default, use rocket radius.
1077+ Reference fuselage radius where the fins are located. This is used
1078+ to calculate lift coefficient and to draw the rocket. If None,
1079+ which is default, the rocket radius will be used.
10691080 airfoil : tuple, optional
10701081 Default is null, in which case fins will be treated as flat plates.
10711082 Otherwise, if tuple, fins will be considered as airfoils. The
0 commit comments