R/MAC.R

Defines functions extend pointsxy.concept plotxy.concept pointsxy plotxy pointsxy.MAC MAC.wing MAC MAC_AF MAC_d MAC_MAC MAC_C MAC_S

#Naming refers to\

#  Root Chord (A):
#MAC Graphic
#  Tip Chord (B):
#  Sweep Distance (S):
#  Half Span (Y):
#  C  of Gravity (CG):
#Sweep Distance @ MAC (C) =
#Mean Aerodynamic Chord (MAC) =
#MAC Distance from Root (d) =
#http://www.nasascale.org/p2/wp-content/uploads/mac-calculator.htm
#
#MAC
MAC_S<-function(span,sweep) span * tand(sweep)/2
MAC_C<-function(S,A,B) (S*(A+2*B)) / (3*(A+B))#
MAC_MAC<-function(A,B) A-(2*(A-B)*(0.5*A+B) / (3*(A+B)))
MAC_d<-function(A,B,Y)  (2*Y*(0.5*A+B)) / (3*(A+B))
#MAC_B.P.<-function(CG,C,MAC) ((CG-C) / MAC)
MAC_AF<-function(B.P.,MAC,C) C + B.P.* MAC

MAC<-function(x,...) UseMethod('MAC')


MAC.wing<-function(wing,B.P=NA){
  if(is.na(B.P)){
    try(B.P<-wing$Xf_C)
    message('B.P is missing from call, Extracting from wing')
  }
  if(wing$Type==0){
    re<-list(
      xSweep = MAC_S(wing$Span,wing$Sweep),#Sweep Distance @ tip
    xMAC  = MAC_C(MAC_S(wing$Span,wing$Sweep),wing$ChordR,wing$ChordT),#Sweep Distance @ MAC
    ChordAvg = MAC_MAC(wing$ChordR,wing$ChordT),
    yMAC = MAC_d(wing$ChordR,wing$ChordT,wing$Span/2),
    AF=MAC_AF(B.P,MAC_MAC(wing$ChordR,wing$ChordT), MAC_C(MAC_S(wing$Span,wing$Sweep),wing$ChordR,wing$ChordT)))
    re$Type=0
    class(re)<-c('MAC','list')
    re
  }else if(wing$Type==1){
    wing$Span<-wing$Span*2
    wing$Type<-0
    #wing$
    rr=MAC(wing)
    rr$Type=1
    return(rr)
  }else if(wing$Type==2){

  }
}


#MAC_CG<-function(B.P.,MAC,C) C + B.P.* MAC
#afprop<-MAC(wing.default,B.P = .25)


pointsxy.MAC<-function(afprop,xf=0){
  lines(c(xf+afprop$xMAC,xf+afprop$xMAC+afprop$ChordAvg),c(afprop$yMAC,afprop$yMAC),type='l',col='red')
  points(xf+afprop$AF,afprop$yMAC,col='red')
}

#w = list(x=0,ChordR = .5,ChordT = .3,Sweep = 12,Span = 1.5)
#class(w) = 'wing'

#MAC.wing(w,Xcg = .21)
#
plotxy<-function(x,...) UseMethod('plotxy')
pointsxy<-function(x,...) UseMethod('pointsxy')


plotxy.concept<-function(concept,asp = 1){
    plot(c(0,FU$Length),c(0,FU$Length),type = 'n',asp = asp)
    plotxy.canard<-function(concept){
    pointsxy(WM)
    pointsxy(WC)
    }
    plotxy.canard2v<-function(concept){
    pointsxy(WM)
    pointsxy(WC)
    }
    plotxy.conventional<-function(concept){
    pointsxy(WM)
    pointsxy(WH)
    }
    plotxy.conventional2v<-function(concept){
    pointsxy(WM)
    pointsxy(WH)
    }
    plotxy.aerobatics<-function(concept){
    pointsxy(WM)
    pointsxy(WH)
    }
    plotxy(concept)
}

pointsxy.concept<-function(concept){
        plotxy.canard<-function(concept){
    pointsxy(WM)
    pointsxy(WC)
    }
    plotxy.canard2v<-function(concept){
    pointsxy(WM)
    pointsxy(WC)
    }
    plotxy.conventional<-function(concept){
    pointsxy(WM)
    pointsxy(WH)
    }
    plotxy.conventional2v<-function(concept){
    pointsxy(WM)
    pointsxy(WH)
    }
    plotxy.aerobatics<-function(concept){
    pointsxy(WM)
    pointsxy(WH)
    }
    pointsxy(concept)
}

#pointsxy.MAC<-function(MAC,x=0){
 #   points(c(x + MAC$D_Sweep_atMAC,x+ MAC$D$Sweep_atMAC +MAC$ChordAvg),c(MAC$yMAC,MAC$yMAC),type = 'l',col = 'red')
#}

extend<-function(x,...) UseMethod('extend')
HaoLi111/rAviExp documentation built on Oct. 21, 2022, 2:18 a.m.