예제 #1
0
def gammag(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 np.degrees(np.arccos((Rwx * lty - Rwy * ltx) / (lt * Rg)))
예제 #2
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))
예제 #3
0
def gammak(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 np.degrees(
        np.arccos((sa * (Ray * ltz - Raz * lty) + ca *
                   (Rax * lty - Ray * ltx)) / lt))
예제 #4
0
파일: fig17.py 프로젝트: rschmehl/parotor
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)
a, b, Ma, Mg = vMarzmean(lK, Rg, alpha, betas, beta, np.radians(delta))
ax1.plot(delta, np.degrees(a), 'r')
ax1.plot(delta, np.degrees(b), 'b--')
ax2.plot(delta, Ma, 'r')
#ax2.plot(delta, vMarzmean0(lK, Rg, alpha, betas, beta, np.radians(delta)), 'b--')

beta = np.radians(60)
a, b, Ma, Mg = vMarzmean(lK, Rg, alpha, betas, beta, np.radians(delta))
ax1.plot(delta, np.degrees(a), 'r')
ax1.plot(delta, np.degrees(b), 'b--')
예제 #5
0
파일: fig18.py 프로젝트: rschmehl/parotor
            marker='o',
            s=80,
            linewidth=1.2,
            edgecolor='k',
            facecolor='w')
plt.xlim(1.0, 5.0)
plt.ylim(0.0, 3.0)
plt.xticks(np.arange(1.0, 5.01, 1.0))
plt.yticks(np.arange(0.0, 3.01, 1.0))
minorLocator = MultipleLocator(0.5)
ax.xaxis.set_minor_locator(minorLocator)
ax.yaxis.set_minor_locator(minorLocator)
plt.xlabel(r"Relative distance between rotor centers \$\lK/\Rk\, [-]\$",
           labelpad=10)
plt.ylabel(r"Rotor size ratio \$\Rg/\Rk\, [-]\$", labelpad=10)

# Test to compare with Fig. 17
a, Ma, f = vMarzmean(5.0, 1.25, alpha, betas, beta, delta)
print "Ma = ", Ma, " alpha = ", np.degrees(a), " betas = ", np.degrees(
    betas), "Rko/Rk = ", lK * np.sin(beta) / np.sin(a)

# Save as SVG file
plt.subplots_adjust(left=0.07,
                    bottom=None,
                    right=0.93,
                    top=None,
                    wspace=None,
                    hspace=None)
plt.savefig("fig18_diagram.svg")
plt.show()
예제 #6
0
vMarzmean = np.vectorize(Marzmean)

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

alpha = np.radians(60)
betas = np.radians(0)
beta = np.radians(30)
delta = np.radians(45)
#lK     = 1./np.tan(beta)
lK = 2.6
Rg = np.arange(2.6, 3.0, 0.01)
N = 4

a, b, Ma, Mg, Ftau = vMarzmean(lK, Rg, alpha, betas, beta, delta)
Mam = np.ma.masked_where(Ftau > 10., Ma)
ax1.plot(Rg, np.degrees(a), 'r')
ax1.plot(Rg, np.degrees(b), 'b')
ax1.plot([0.0, 3.0], [60.0, 60.0], 'k', label="positive ground clearance")
ax2.plot(Rg, Mam, 'r')
ax2.plot(Rg, Ftau, 'g')
print "lK = ", lK, " Rg = ", Rg[np.argmax(Ftau > 10.) -
                                1], " Mam = ", Mam[np.argmax(Ftau > 10.) - 1]

ax1.set_xlim(0.0, 3.0)
ax1.set_ylim(0.0, 90.0)

ax2.set_xlim(0.0, 3.0)
ax2.set_ylim(0.0, 2.0)
ax2.yaxis.tick_right()
ax2.yaxis.set_ticks_position('both')
예제 #7
0
파일: fig16.py 프로젝트: rschmehl/parotor
    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\$")           
ax1.plot(omegat, Ftrysum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'b', label=r"\$\Faky/\Fakz\$")
ax1.plot(omegat, Marxsum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'k')             
ax1.plot(omegat, Marysum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'r--')

ax1.set_xlim(0,360)
ax1.set_ylim(-0.01,0.01)
ax1.set_xticks(np.arange(0,361,90))
#ax1.set_yticks(np.arange(-1,1.1,0.5))

ax2.plot(omegat, Marzsum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'r', label=r"\$\Ma/(\Rk\Fakz)\$")
ax2.plot(omegat, Mgrzsum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'b', label=r"\$\Mgz/(\Rk\Fakz)\$")              
예제 #8
0
파일: fig11.py 프로젝트: rschmehl/parotor
    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')
#ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b')
delta = np.radians(150)
예제 #9
0
파일: sect6_5.py 프로젝트: rschmehl/parotor
CM = 2 * Ma / (rho * Rko * S * vw * vw)
Cp = lam * CM
aeff = np.arccos(cb * ca)
Ftrxam = Ftrxminmax(lKRk, RgRk, alpha, betas, beta, delta)
Ftryam = Ftryminmax(lKRk, RgRk, alpha, betas, beta, delta)
h = np.sin(beta) * lK - sa * Rko

print "Pnom  : ", Pnom
print "lK/Rk : ", lKRk
print "Rg/Rk : ", RgRk

print "vtip  : ", vtip
print "lambda: ", lam
print "Ma    : ", Ma
print "S     : ", S
print "alpha : ", np.degrees(alpha)
print "betas : ", np.degrees(betas)
print "MaRF  : ", MaRF
print "Fakz  : ", Fakz
print "Ftiz  : ", Fakz / N
print "test  : ", Ma / (Rk * Fakz)
print "L     : ", L
print "D     : ", D
print "LoD   : ", LoD
print "CL    : ", CL
print "CD    : ", CD
print "CM    : ", CM
print "Cp    : ", Cp
print "aeff  : ", np.degrees(aeff)
print "Ftrx  : ", Ftrxam
print "Ftry  : ", Ftryam
예제 #10
0
# vector base rotating reference frame
e = le * eb(ot0)
ebx = e[:, 0]
ax.plot([0, ebx[0]], [0, ebx[1]], [0, ebx[2]], linewidth=3, color='b')
eby = e[:, 1]
ax.plot([0, eby[0]], [0, eby[1]], [0, eby[2]], linewidth=3, color='b')
ebz = e[:, 2]
#ax.plot([0, ebz[0]], [0, ebz[1]], [0, ebz[2]], linewidth=2, color='b')

# elevation angle
r0 = np.array([0, 0, 0])
R = 32
e = ewx
n = -ewy
r = arc(r0, R, e, n, np.degrees(beta), omegat)
ax.plot(r[0, :], r[1, :], r[2, :], zorder=20, linewidth=2, color='r')

# rotor spinning
R = 20
e = ewx
n = ewz
r = arc(r0, R, e, n, ot0, omegat)
ax.plot(r[0, :], r[1, :], r[2, :], zorder=20, linewidth=2, color='r')

# Flying rotor
r = rA(lK, Rk, alpha, betas, beta, delta, omegat)
ax.plot(r[0], r[1], r[2], zorder=-10, linewidth=1.2, color='#00ff00')
r = rA(lK, Rk, alpha, betas, beta, delta, ot0 + ot[0])
ax.scatter(r[0],
           r[1],