A.6.10+ Летающая функция...
dUdVstud
0:00 / 0:00
A.6.10+ Летающая функция...
1 536 просмотров · 6 лет назад
dUdVstud
27,4 тыс. подписчиков
1 536 просмотров · 6 лет назад
#dudvstud #математиканапальцах #войтивайти
Телеграм: https://t.me/dudvstud
Плейлисты, литература, помощь проекту и прочее: https://dudvstud.wixsite.com/website
Рассматриваем, как функция Жуковского используется для моделирования профиля крыла самолета из окружности. Пробуем модифицировать профиль крыла центром и радиусом исходной окружности. А также пробуем делать тонкую настройку через преобразование Кармана-Трефтца.
Для желающих поэкспериментировать:
corners = np.array([[-1, 1], [-1, -1], [1, 1], [1, -1], [0, 0]])
C = [np.array([0.1, 0.2]), np.array([0.1, 0.1]), np.array([0.1, 0.0]), np.array([0.0, 0.15]), np.array([0.0, 0.1])]
R = 0.9
for i in range(5):
a = np.arange(100) * 2 * np.pi / 99
x = np.cos(a) * R + C[i][0]
y = np.sin(a) * R + C[i][1]
plt.figure(num = None, figsize = (22, 10), dpi = 80, facecolor = 'w', edgecolor = 'k')
plt.subplot(1, 2, 1)
plt.plot(x, y)
plt.plot(corners[:, 0], corners[:, 1], '.')
z = x + 1j * y
z = (z + 1/z) * 0.5
x_ = np.real(z)
y_ = np.imag(z)
plt.subplot(1, 2, 2)
plt.plot(x_, y_)
plt.plot(corners[:, 0], corners[:, 1], '.')
plt.show()
и через преобразование:
corners = np.array([[-1, 1], [-1, -1], [1, 1], [1, -1], [0, 0]])
C = [np.array([0.1, 0.2]), np.array([0.1, 0.1]), np.array([0.1, 0.0]), np.array([0.0, 0.15]), np.array([0.0, 0.1])]
R = 0.9
def f1(z):
return (z - 1.0) / (z + 1.0)
def f2(z):
return z ** 2.0
def f3(z):
return (1.0 + z) / (1.0 - z)
for i in range(5):
a = np.arange(100) * 2 * np.pi / 99
x = np.cos(a) * R + C[i][0]
y = np.sin(a) * R + C[i][1]
plt.figure(num = None, figsize = (22, 10), dpi = 80, facecolor = 'w', edgecolor = 'k')
z = x + 1j * y
z = (z + 1/z) * 0.5
x_ = np.real(z)
y_ = np.imag(z)
plt.subplot(1, 2, 1)
plt.plot(x_, y_)
plt.plot(corners[:, 0], corners[:, 1], '.')
z = x + 1j * y
z = f3(f2(f1(z)))
x_ = np.real(z)
y_ = np.imag(z)
plt.subplot(1, 2, 2)
plt.plot(x_, y_)
plt.plot(corners[:, 0], corners[:, 1], '.')
plt.show()