コード例 #1
0
ファイル: fig11.py プロジェクト: rschmehl/parotor
def ltfree(lK, Rg, alpha, beta, delta, omegat):
    ltx = np.cos(alpha) * np.cos(np.radians(omegat) + delta) + np.cos(
        beta) * lK - np.cos(np.radians(omegat)) * Rg
    lty = np.sin(np.radians(omegat) + delta) - np.sin(np.radians(omegat)) * Rg
    ltz = -np.sin(alpha) * np.cos(np.radians(omegat) +
                                  delta) + np.sin(beta) * lK
    return np.sqrt(ltx * ltx + lty * lty + ltz * ltz)
コード例 #2
0
ファイル: fig17.py プロジェクト: rschmehl/parotor
def Ftry(lK, Rg, alpha, betas, beta, delta, omegat, ot):
    cb = np.cos(beta)
    sb = np.sin(beta)
    ca = np.cos(alpha)
    sa = np.sin(alpha)
    cbs = np.cos(betas)
    sbs = np.sin(betas)
    cot = np.cos(np.radians(omegat) + ot)
    sot = np.sin(np.radians(omegat) + ot)
    cotd = np.cos(np.radians(omegat) + ot + delta)
    sotd = np.sin(np.radians(omegat) + ot + delta)
    #
    ekxx = ca * cbs
    ekxy = ca * sbs
    ekxz = -sa
    #
    ekyx = -sbs
    ekyy = cbs
    ekyz = 0
    #
    ekzx = sa * cbs
    ekzy = sa * sbs
    ekzz = ca
    #
    ltx = ekxx * cotd + ekyx * sotd + cb * lK - cot * Rg
    lty = ekxy * cotd + ekyy * sotd - sot * Rg
    ltz = ekxz * cotd + sb * lK
    #
    return (ltx * ekyx + lty * ekyy + ltz * ekyz) / (ltx * ekzx + lty * ekzy +
                                                     ltz * ekzz)
コード例 #3
0
ファイル: fig17.py プロジェクト: rschmehl/parotor
def Mgrz(lK, Rg, alpha, betas, beta, delta, omegat, ot):
    cb = np.cos(beta)
    sb = np.sin(beta)
    ca = np.cos(alpha)
    sa = np.sin(alpha)
    cbs = np.cos(betas)
    sbs = np.sin(betas)
    cot = np.cos(np.radians(omegat) + ot)
    sot = np.sin(np.radians(omegat) + ot)
    cotd = np.cos(np.radians(omegat) + ot + delta)
    sotd = np.sin(np.radians(omegat) + ot + delta)
    #
    ekxx = ca * cbs
    ekxy = ca * sbs
    ekxz = -sa
    #
    ekyx = -sbs
    ekyy = cbs
    ekyz = 0
    #
    ekzx = sa * cbs
    ekzy = sa * sbs
    ekzz = ca
    #
    eaxx = ekxx * cotd + ekyx * sotd
    eaxy = ekxy * cotd + ekyy * sotd
    eaxz = ekxz * cotd
    #
    ltx = eaxx + cb * lK - cot * Rg
    lty = eaxy - sot * Rg
    ltz = eaxz + sb * lK
    #
    vcz = cot * lty - sot * ltx
    #
    return vcz / (ltx * ekzx + lty * ekzy + ltz * ekzz)
コード例 #4
0
def rB(R, omegat):
    cot = np.cos(np.radians(omegat))
    sot = np.sin(np.radians(omegat))
    rBx = cot * R
    rBy = sot * R
    rBz = 0
    return np.array([rBx, rBy, rBz])
コード例 #5
0
def rA(lK, R, alpha, betas, beta, delta, omegat):
    cb = np.cos(beta)
    sb = np.sin(beta)
    ca = np.cos(alpha)
    sa = np.sin(alpha)
    cbs = np.cos(betas)
    sbs = np.sin(betas)
    cotd = np.cos(np.radians(omegat) + delta)
    sotd = np.sin(np.radians(omegat) + delta)
    rAx = (ca * cbs * cotd - sbs * sotd) * R + cb * lK
    rAy = (ca * sbs * cotd + cbs * sotd) * R
    rAz = (-sa * cotd) * R + sb * lK
    return np.array([rAx, rAy, rAz])
コード例 #6
0
def arc(r0, R, e, n, phi0, phi):
    e1 = e / np.sqrt(np.sum(e * e))  # normalize
    en = n / np.sqrt(np.sum(n * n))  # normalize
    ip = np.argmax(phi > phi0)  # find end index
    e2 = np.cross(en, e1)
    cp = np.cos(np.radians(phi[:ip]))
    sp = np.sin(np.radians(phi[:ip]))
    #    r  = cp*e1+sp*e2
    r = np.zeros((3, ip))
    r[0, :] = r0[0] + R * (cp * e1[0] + sp * e2[0])
    r[1, :] = r0[1] + R * (cp * e1[1] + sp * e2[1])
    r[2, :] = r0[2] + R * (cp * e1[2] + sp * e2[2])
    return r
コード例 #7
0
ファイル: fig14.py プロジェクト: rschmehl/parotor
def cosgammag(lK, Rg, beta, delta, omegat):
    alpha  = 0.5*np.pi-beta
    cb     =  np.cos(beta)
    sb     =  np.sin(beta)
    cot    =  np.cos(np.radians(omegat))
    sot    =  np.sin(np.radians(omegat))
    cotd   =  np.cos(np.radians(omegat)+delta)
    sotd   =  np.sin(np.radians(omegat)+delta)
    ltx    =  np.cos(alpha)*cotd + cb*lK - cot*Rg
    lty    =                sotd         - sot*Rg
    ltz    = -np.sin(alpha)*cotd + sb*lK
    Rwx    =  cot*Rg
    Rwy    =  sot*Rg
    Rwz    =  0
    lt     =  np.sqrt(ltx*ltx+lty*lty+ltz*ltz)
    return (Rwx*lty-Rwy*ltx)/(lt*Rg)
コード例 #8
0
ファイル: fig14.py プロジェクト: rschmehl/parotor
def vt(lK, Rg, beta, delta, omegat):
    alpha  = 0.5*np.pi-beta
    cb     =  np.cos(beta)
    sb     =  np.sin(beta)
    ca     =  np.cos(alpha)
    sa     =  np.sin(alpha)
    cot    =  np.cos(np.radians(omegat))
    sot    =  np.sin(np.radians(omegat))
    cotd   =  np.cos(np.radians(omegat)+delta)
    sotd   =  np.sin(np.radians(omegat)+delta)
    ltx    =  ca*cotd + cb*lK - cot*Rg
    lty    =     sotd         - sot*Rg
    ltz    = -sa*cotd + sb*lK
    lt     =  np.sqrt(ltx*ltx+lty*lty+ltz*ltz)
    dltxdt = -ca*sotd         + sot*Rg
    dltydt =     cotd         - cot*Rg
    dltzdt =  sa*sotd
    return (ltx*dltxdt+lty*dltydt+ltz*dltzdt)/lt
コード例 #9
0
ファイル: fig14.py プロジェクト: rschmehl/parotor
def cosgammak(lK, Rg, beta, delta, omegat):
    alpha  = 0.5*np.pi-beta
    cb     =  np.cos(beta)
    sb     =  np.sin(beta)
    ca     =  np.cos(alpha)
    sa     =  np.sin(alpha)
    cot    =  np.cos(np.radians(omegat))
    sot    =  np.sin(np.radians(omegat))
    cotd   =  np.cos(np.radians(omegat)+delta)
    sotd   =  np.sin(np.radians(omegat)+delta)
    Rax    =  ca*cotd
    Ray    =     sotd
    Raz    = -sa*cotd
    ltx    =  Rax + cb*lK - cot*Rg
    lty    =  Ray         - sot*Rg
    ltz    =  Raz + sb*lK
    lt     =  np.sqrt(ltx*ltx+lty*lty+ltz*ltz)
    return (sa*(Ray*ltz-Raz*lty) + ca*(Rax*lty-Ray*ltx))/lt
コード例 #10
0
def Marz(lK, Rg, alpha, betas, beta, delta, omegat, ot):
    cb = np.cos(beta)
    sb = np.sin(beta)
    ca = np.cos(alpha)
    sa = np.sin(alpha)
    cbs = np.cos(betas)
    sbs = np.sin(betas)
    cot = np.cos(np.radians(omegat) + ot)
    sot = np.sin(np.radians(omegat) + ot)
    cotd = np.cos(np.radians(omegat) + ot + delta)
    sotd = np.sin(np.radians(omegat) + ot + delta)
    #
    ekxx = ca * cbs
    ekxy = ca * sbs
    ekxz = -sa
    #
    ekyx = -sbs
    ekyy = cbs
    ekyz = 0
    #
    ekzx = sa * cbs
    ekzy = sa * sbs
    ekzz = ca
    #
    eaxx = ekxx * cotd + ekyx * sotd
    eaxy = ekxy * cotd + ekyy * sotd
    eaxz = ekxz * cotd
    #
    ltx = eaxx + cb * lK - cot * Rg
    lty = eaxy - sot * Rg
    ltz = eaxz + sb * lK
    #
    vcx = eaxy * ltz - eaxz * lty
    vcy = eaxz * ltx - eaxx * ltz
    vcz = eaxx * lty - eaxy * ltx
    #
    d = ltx * ekzx + lty * ekzy + ltz * ekzz
    #
    return np.where(d > dmin, (vcx * ekzx + vcy * ekzy + vcz * ekzz) / d, 0.0)
コード例 #11
0
def gammak2(lK, Rg, beta, delta, omegat):
    alpha = 0.5 * np.pi - beta
    cb = np.cos(beta)
    sb = np.sin(beta)
    cot = np.cos(np.radians(omegat))
    sot = np.sin(np.radians(omegat))
    cotd = np.cos(np.radians(omegat) + delta)
    sotd = np.sin(np.radians(omegat) + delta)
    cotdt = np.cos(np.radians(omegat + 90) + delta)
    sotdt = np.sin(np.radians(omegat + 90) + delta)
    ltx = np.cos(alpha) * cotd + cb * lK - cot * Rg
    lty = sotd - sot * Rg
    ltz = -np.sin(alpha) * cotd + sb * lK
    eyrx = np.cos(alpha) * cotdt
    eyry = sotdt
    eyrz = -np.sin(alpha) * cotdt
    lt = np.sqrt(ltx * ltx + lty * lty + ltz * ltz)
    return np.degrees(np.arccos((eyrx * ltx + eyry * lty + eyrz * ltz) / lt))
コード例 #12
0
ファイル: fig14.py プロジェクト: rschmehl/parotor
    cot    =  np.cos(np.radians(omegat))
    sot    =  np.sin(np.radians(omegat))
    cotd   =  np.cos(np.radians(omegat)+delta)
    sotd   =  np.sin(np.radians(omegat)+delta)
    ltx    =  ca*cotd + cb*lK - cot*Rg
    lty    =     sotd         - sot*Rg
    ltz    = -sa*cotd + sb*lK
    lt     =  np.sqrt(ltx*ltx+lty*lty+ltz*ltz)
    dltxdt = -ca*sotd         + sot*Rg
    dltydt =     cotd         - cot*Rg
    dltzdt =  sa*sotd
    return (ltx*dltxdt+lty*dltydt+ltz*dltzdt)/lt
    
f, (ax1, ax2) = plt.subplots(1, 2)

beta   = np.radians(30)
delta  = np.radians(0)
lK     = 2
Rg     = 1
omegat = np.arange(0, 360, 1)
ax1.plot(omegat,    cosgammak(lK, Rg, beta, delta, omegat), 'r') # gammak
ax1.plot(omegat, Rg*cosgammag(lK, Rg, beta, delta, omegat), 'b') # Rg*gammag
ax1.plot(omegat,    vt(lK, Rg, beta, delta, omegat), 'g')
ax1.plot(omegat,    cosgammak(lK, Rg, beta, delta, omegat) -
                 Rg*cosgammag(lK, Rg, beta, delta, omegat) -
                    vt(lK, Rg, beta, delta, omegat), 'k--')

ax1.set_xlim(0,360)
ax1.set_ylim(-1,1)
ax1.set_xticks(np.arange(0,361,90))
ax1.set_yticks(np.arange(-1,1.1,0.5))
コード例 #13
0
def ea(alpha, betas, delta, omegat):
    cotd = np.cos(np.radians(omegat) + delta)
    sotd = np.sin(np.radians(omegat) + delta)
    T = ek(alpha, betas)
    e = np.array([[cotd, -sotd, 0], [sotd, cotd, 0], [0, 0, 1]])
    return T.dot(e)
コード例 #14
0
ファイル: fig18.py プロジェクト: rschmehl/parotor
# mean aerodynamic moment over one cycle
def Marzmean(lK, Rg, alpha, betas, beta, delta):
    pos = np.array([0, 0.5 * np.pi, np.pi, 1.5 * np.pi])
    omegat = np.arange(0, 360, 1)
    alpha, betas = orientation(lK, Rg, alpha, betas, beta, delta, omegat, pos)
    return alpha, np.mean(
        Marzsum(lK, Rg, alpha, betas, beta, delta, omegat,
                pos)), Ftrminmax(lK, Rg, alpha, betas, beta, delta, omegat,
                                 pos)


vMarzmean = np.vectorize(Marzmean)

#f, (ax1, ax2) = plt.subplots(1, 2)

alpha = np.radians(60)
beta = np.radians(30)
betas = np.radians(0)
delta = np.radians(45)
N = 4

lK = np.arange(1.0, 5.2, 0.02)  # 0.02 is for print quality
Rg = np.arange(0.0, 3.2, 0.02)  # 0.02 is for print quality
x, y = np.meshgrid(lK, Rg)

a, z, f = vMarzmean(x, y, alpha, betas, beta, delta)
h = np.sin(beta) * lK - np.sin(a)
h1 = np.sin(beta) * lK - np.sin(a) * 1.5
h2 = np.sin(beta) * lK - np.sin(a) * 2.0
h3 = np.sin(beta) * lK - np.sin(a) * 2.5
コード例 #15
0
ファイル: fig11.py プロジェクト: rschmehl/parotor
# max tether length over cycle
def ltmax(lK, Rg, beta, delta):
    omegat = np.arange(0, 360, 1)
    return np.amax(lt(lK, Rg, beta, delta, omegat))


vltfreemin = np.vectorize(ltfreemin)
vltfreemax = np.vectorize(ltfreemax)
vltmin = np.vectorize(ltmin)
vltmax = np.vectorize(ltmax)

f, (ax1, ax2) = plt.subplots(1, 2)

lK = 2
Rg = 1
beta = np.radians(np.arange(0, 91, 1))
delta = np.radians(0)
ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r')
ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b')
#print 'ltmin & ltmax ', ltmin(lK, Rg, np.radians(30), delta), ltmax(lK, Rg, np.radians(30), delta)
delta = np.radians(30)
ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r')
ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b')
delta = np.radians(60)
ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r')
ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b')
delta = np.radians(90)
ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r')
ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b')
delta = np.radians(120)
#ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r')
コード例 #16
0
ファイル: sect6_5.py プロジェクト: rschmehl/parotor
    return alpha, betas, Ma, Mg


def Marzmean0(lK, Rg, alpha, betas, beta, delta):
    pos = np.array([0, 0.5 * np.pi, np.pi, 1.5 * np.pi])
    omegat = np.arange(0, 360, 1)
    return np.mean(Marzsum(lK, Rg, alpha, betas, beta, delta, omegat, pos))


vw = 12.
Rg = 25.
Rk = 20.
Rko = 35.
N = 4
lK = 100.
beta = np.radians(30)
omega = 2.05
delta = np.radians(45)
Pnom = 1.4e6
rho = 1.225

lKRk = lK / Rk
RgRk = Rg / Rk
vtip = omega * Rko
lam = omega * Rko / vw
Ma = Pnom / omega
S = np.pi * (Rko * Rko - Rk * Rk)

alpha = np.radians(60)  # Initial value
betas = np.radians(0)  # Initial value
a, b, c, d = Marzmean(lKRk, RgRk, alpha, betas, beta, delta)
コード例 #17
0
def eb(omegat):
    cot = np.cos(np.radians(omegat))
    sot = np.sin(np.radians(omegat))
    return np.array([[cot, -sot, 0], [sot, cot, 0], [0, 0, 1]])
コード例 #18
0
ファイル: fig17.py プロジェクト: rschmehl/parotor
    Mg = np.mean(Marzsum(lK, Rg, a, b, beta, delta, omegat, pos))
    return alpha, betas, Ma, Mg


def Marzmean0(lK, Rg, alpha, betas, beta, delta):
    pos = np.array([0, 0.5 * np.pi, np.pi, 1.5 * np.pi])
    omegat = np.arange(0, 360, 1)
    return np.mean(Marzsum(lK, Rg, alpha, betas, beta, delta, omegat, pos))


vMarzmean = np.vectorize(Marzmean)
vMarzmean0 = np.vectorize(Marzmean0)

f, (ax1, ax2) = plt.subplots(1, 2)

alpha = np.radians(60)  # 90 - beta | 62.3608549873
betas = np.radians(0)  # 4.38381787735
lK = 2
Rg = 1
N = 4

delta = np.arange(0, 181, 1)

beta = np.radians(30)
a, b, Ma, Mg = vMarzmean(lK, Rg, alpha, betas, beta, np.radians(delta))
ax1.plot(delta, np.degrees(a), 'r', label=r"\$\alpha\$")
ax1.plot(delta, np.degrees(b), 'b', label=r"\$\betas\$")
ax2.plot(delta, Ma, 'r', label=r"\$\Mamean/(\Rk\Fakz)\$")
#ax2.plot(delta, vMarzmean0(lK, Rg, alpha, betas, beta, np.radians(delta)), 'b--')

beta = np.radians(45)
コード例 #19
0
ファイル: fig16.py プロジェクト: rschmehl/parotor
    d = np.amax(Ftrysum(lK, Rg, alpha, betas, beta, delta, omegat, pos))
    return (np.abs(b-a)+np.abs(d-c)+np.abs(a+b)+np.abs(c+d))
            
def fopt(f, lK, Rg, alpha, betas, beta, delta, omegat, pos):
    def foptfixed(p):
        return f(lK, Rg, p[0], p[1], beta, delta, omegat, pos)
    return foptfixed
    

def orientation(lK, Rg, alpha, betas, beta, delta, omegat, pos):
    guess = [ alpha, betas ]
    return fmin(fopt(Ftrminmax, lK, Rg, alpha, betas, beta, delta, omegat, pos), guess, xtol=0.00001, ftol=0.00001, maxiter=100)
    
f, (ax1, ax2) = plt.subplots(1, 2)

beta   = np.radians(30)
alpha  = np.radians(60) # 90 - beta | 62.3608549873
betas  = np.radians(0)  # 4.38381787735
delta  = np.radians(30) # 30
lK     = 2
Rg     = 1
N      = 4
pos    = np.array([ 0, 0.5*np.pi, np.pi, 1.5*np.pi ])
omegat = np.arange(0, 360, 1)

a, b = orientation(lK, Rg, alpha, betas, beta, delta, omegat, pos)
print "alpha = ", np.degrees(a), " betas = ",np.degrees(b)
alpha = a
betas = b

ax1.plot(omegat, Ftrxsum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'r', label=r"\$\Fakx/\Fakz\$")           
コード例 #20
0
    sotdt = np.sin(np.radians(omegat + 90) + delta)
    ltx = np.cos(alpha) * cotd + cb * lK - cot * Rg
    lty = sotd - sot * Rg
    ltz = -np.sin(alpha) * cotd + sb * lK
    eyrx = np.cos(alpha) * cotdt
    eyry = sotdt
    eyrz = -np.sin(alpha) * cotdt
    lt = np.sqrt(ltx * ltx + lty * lty + ltz * ltz)
    return np.degrees(np.arccos((eyrx * ltx + eyry * lty + eyrz * ltz) / lt))


f, (ax1, ax2) = plt.subplots(1, 2)

lK = 2
Rg = 1
beta = np.radians(30)
omegat = np.arange(0, 360, 1)

delta = np.radians(0)
ax1.plot(omegat, gammag(lK, Rg, beta, delta, omegat), 'r')
#ax1.plot(omegat, gammak(lK, Rg, beta, delta, omegat), 'b--')
#print "gammag @  90deg = ", gammag(lK, Rg, beta, delta,  90)
#print "gammag @ 270deg = ", gammag(lK, Rg, beta, delta, 270)
#print "gammag_max      = ", np.max(gammag(lK, Rg, beta, delta, omegat))
#print "gammag_min      = ", np.min(gammag(lK, Rg, beta, delta, omegat))
#print "max @          = ", omegat[np.argmax(gammag(lK, Rg, beta, delta, omegat))]
#print "min @          = ", omegat[np.argmin(gammag(lK, Rg, beta, delta, omegat))]
#print "gammag_max      = ", gammag(lK, Rg, beta, delta, omegat[np.argmax(gammag(lK, Rg, beta, delta, omegat))])
#print "gammag_min      = ", gammag(lK, Rg, beta, delta, omegat[np.argmin(gammag(lK, Rg, beta, delta, omegat))])
delta = np.radians(30)
ax1.plot(omegat, gammag(lK, Rg, beta, delta, omegat), 'r')
コード例 #21
0
#
# This is important for font substitution
mpl.rcParams['svg.fonttype'] = 'none'


def orthogonal_proj(zfront, zback):
    a = (zfront + zback) / (zfront - zback)
    b = -2 * (zfront * zback) / (zfront - zback)
    # -0.0001 added for numerical stability as suggested in:
    # http://stackoverflow.com/questions/23840756
    return np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, a, b],
                     [0, 0, -0.0001, zback]])


# Propblem parameters
beta = np.radians(30)
alpha = np.radians(60)  # 90 - beta
betas = np.radians(10)
delta = np.radians(30)
lK = 100
Rg = 25
Rk = 20
Rko = 35
le = 40
N = 4
ot0 = 40  # offset
ot = np.array([0, 90, 180, 270])

# Derived trigonometric data
omegat = np.arange(0, 361, 1)