def get_centroid(aircraft): """Return the coordinates of the centroid.""" # stringer_area = aircraft.wing.stringers.area # cap_area = aircraft.wing.spars.cap_area # TODO: Fix this # caps_x = [value for spar in aircraft.wing.spars.x for value in spar] # caps_z = [value for spar in aircraft.wing.spars.z for value in spar] # stringers_x = aircraft.wing.stringers.x # stringers_z = aircraft.wing.stringers.z # denominator = float( # len(caps_x) * cap_area + len(stringers_x) * stringer_area) # centroid_x = float( # sum([x * cap_area # for x in caps_x]) + sum([x * stringer_area for x in stringers_x])) # centroid_x = centroid_x / denominator # centroid_z = float( # sum([z * cap_area # for z in caps_z]) + sum([z * stringer_area for z in stringers_z])) # centroid_z = centroid_z / denominator # return (centroid_x, centroid_z) return (200, 420) def get_inertia_terms(self): """Obtain all inertia terms.""" stringer_area = self.stringer.area cap_area = self.spar.cap_area # Adds upper and lower components' coordinates to list x_stringers = self.stringer.x z_stringers = self.stringer.z x_spars = self.spar.x[:][0] + self.spar.x[:][1] z_spars = self.spar.z[:][0] + self.spar.z[:][1] stringer_count = range(len(x_stringers)) spar_count = range(len(self.spar.x)) # I_x is the sum of the contributions of the spar caps and stringers # TODO: replace list indices with dictionary value I_x = sum( [cap_area * (z_spars[i] - self.centroid[1])**2 for i in spar_count]) I_x += sum([ stringer_area * (z_stringers[i] - self.centroid[1])**2 for i in stringer_count ]) I_z = sum( [cap_area * (x_spars[i] - self.centroid[0])**2 for i in spar_count]) I_z += sum([ stringer_area * (x_stringers[i] - self.centroid[0])**2 for i in stringer_count ]) I_xz = sum([ cap_area * (x_spars[i] - self.centroid[0]) * (z_spars[i] - self.centroid[1]) for i in spar_count ]) I_xz += sum([ stringer_area * (x_stringers[i] - self.centroid[0]) * (z_stringers[i] - self.centroid[1]) for i in stringer_count ]) return (I_x, I_z, I_xz)