лаба5
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
старший преподаватель |
|
|
|
Н.А. Соловьева |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №5 |
Графический интерфейс приложения |
по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ |
|
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4616 |
|
|
|
А.В.Павлов |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2018
-
ПОСТАНОВКА ЗАДАЧИ
Разработать графический интерфейс программы
ЗАДАНИЕ: Построение поверхностей второго порядка
-
ОПИСАНИЕ РАЗРАБОТАННОЙ ПРОГРАММЫ
import sys
# Импортируем наш интерфейс из файла
from slog import *
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
import math
from scipy import integrate
from sympy import *
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from PyQt5.QtGui import QIcon, QPixmap
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Здесь прописываем событие нажатия на кнопку
self.ui.pushButton.clicked.connect(self.main)
self.ui.pushButton_2.clicked.connect(self.onClick)
def onClick(self):
self.SW = Second()
self.SW.show()
# Пока пустая функция которая выполняется
# при нажатии на кнопку
def main(self):
global str_source
str_source=[]
str_source.append((self.ui.lineEdit_2.text()))
str_source.append(self.ui.lineEdit.text())
str_source.append(self.ui.lineEdit_9.text())
str_source.append(self.ui.lineEdit_10.text())
str_source.append(self.ui.lineEdit_8.text())
str_source.append(self.ui.lineEdit_7.text())
str_source.append(self.ui.lineEdit_6.text())
str_source.append(self.ui.lineEdit_3.text())
str_source.append(self.ui.lineEdit_5.text())
str_source.append(self.ui.lineEdit_4.text())
sorc = [int(num) for num in str_source]
src=[]
for i in range(len(sorc)):
if (i >= 3) & (i != 9):
src.append(sorc[i] / 2)
else:
src.append(sorc[i])
print(src)
I1 = src[0] + src[1] + src[2]
I2 = round(np.linalg.det(np.array([[src[0], src[3]], [src[3], src[1]]])) + np.linalg.det(
np.array([[src[0], src[5]], [src[5], src[2]]])) + np.linalg.det(
np.array([[src[1], src[5]], [src[5], src[2]]])))
sigma = round(
np.linalg.det(np.array([[src[0], src[3], src[4]], [src[3], src[1], src[5]], [src[4], src[5], src[2]]])))
I3 = round(
np.linalg.det(np.array([[src[0], src[3], src[5]], [src[3], src[1], src[4]], [src[5], src[4], src[2]]])))
K2 = round(np.linalg.det(np.array([[src[0], src[6]], [src[6], src[9]]])) + np.linalg.det(
np.array([[src[1], src[7]], [src[7], src[9]]])) + np.linalg.det(
np.array([[src[3], src[8]], [src[8], src[9]]])))
K3 = round(np.linalg.det(
np.array([[src[0], src[3], src[6]], [src[3], src[1], src[7]], [src[6], src[7], src[9]]])) + np.linalg.det(
np.array([[src[0], src[5], src[6]], [src[5], src[2], src[8]], [src[6], src[8], src[9]]])) + np.linalg.det(
np.array([[src[1], src[4], src[7]], [src[4], src[2], src[8]], [src[7], src[8], src[9]]])))
K4 = round(np.linalg.det(np.array(
[[src[0], src[3], src[5], src[6]], [src[3], src[1], src[4], src[7]], [src[5], src[4], src[2], src[8]],
[src[6], src[7], src[8], src[9]]])))
delta = round(np.linalg.det(np.array(
[[src[0], src[3], src[4], src[6]], [src[3], src[1], src[5], src[7]], [src[4], src[5], src[2], src[4]],
[src[6], src[7], src[8], src[9]]])))
l = Symbol('l')
L = solve(l ** 3 - I1 * l ** 2 + I2 * l - I3, l)
L1 = int(L[0])
if len(L) == 2:
L2 = int(L[1])
elif len(L) == 3:
L2 = int(L[1])
L3 = int(L[2])
elif len(L) == 1:
L2 = 1
L3 = 1
if L1 == 0:
L1 = int(L2)
elif L2 == 0:
if len(L) == 3:
L2 = int(L3)
else:
L2 = int(L1)
elif L3 == 0:
L3 = int(L2)
if L1 == 0 and L2 == 0 and L3 == 0:
print('Eror')
print(L)
# генерация точек
# X, Y = np.meshgrid(np.arange(-1, 1, 0.25), np.arange(-1, 1, 0.25))
x = np.linspace(-2, 2, 100)
z = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, z)
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
[u, v] = np.meshgrid(u, v)
print(L1, L2)
print(K3, I2)
if sigma != 0:
if I2 > 0 and I2 * sigma > 0:
if K4 < 0:
self.elipsoid(K4, I3, L1, L2, L3, u, v) # Элипсоид
elif K4 > 0:
self.mnim_elipsoid(K4, I3, L1, L2, L3, u, v) # Мнимый элипсоид
elif K4 == 0:
self.mnim_konus(L1, L2, L3, X, Y) # Мнимый конус
elif sigma == 0:
if K4 < 0:
self.elip_hyper(K4, I2, L1, L2, u, v) # Элип гиперболоид
elif K4 > 0:
self.hyper_parab(K4, I2, L1, L2, u, v) # Гиперболический параболоид
elif K4 == 0:
if I2 > 0:
if I1 * K3 < 0:
self.elip_cylin(K3, I2, L1, L2, X, Y) # Эллиптический цилиндр
elif I1 * K3 > 0:
self.mnim_elip_cylin(K3, I2, L1, L2, X, Y) # Мнимый эллиптический цилиндр
elif K3 == 0:
('Ошибка')
if I2 < 0:
if K3 != 0:
self.hyper_cylin(K3, I2, L1, L2, X, Y) # Гиперболический цилиндр
else:
self.para_peresl_plosk(L2, X, Y) # Пересек плоскости
if I2 == 0:
if K3 != 0:
self.parab_cylin(K3, I1, X, Y) # Парабалический цилиндр
if K3 == 0:
if K2 < 0:
self.parall_plosk(K2, I1, X, Y) # Паралель плоскости
elif K2 == 0:
self.sovp_plosk(X, Y) # Совмещенные плоскости
elif K3 > 0:
self.mnim_parall_plosk(K2, I1, X, Y) # Пара Паралель плоскости
else:
print('Ошибка')
def elipsoid(self,K4, I3, L1, L2, L3, X, Y):
# 6 5 4 0 0 0 0 0 0 -3
self.ui.lineEdit_11.setText("Элипсоид")
u = np.linspace(0, 2 * np.pi, 20)
v = np.linspace(0, np.pi, 20)
[u, v] = np.meshgrid(u, v)
x = 1 / np.sqrt(-K4 / (L1 * I3)) * np.outer(np.cos(u), np.sin(v))
y = 1 / np.sqrt(-K4 / (L2 * I3)) * np.outer(np.sin(u), np.sin(v))
z = 1 / np.sqrt(-K4 / (L3 * I3)) * np.outer(np.ones_like(u), np.cos(v))
self.plot(x, y, z)
def mnim_elipsoid(self,K4, I3, L1, L2, L3, u, v):
self.ui.lineEdit_11.setText("Мнимый элипсоид")
u = np.linspace(0, 2 * np.pi, 20)
v = np.linspace(0, np.pi, 20)
[u, v] = np.meshgrid(u, v)
x = 1 / np.sqrt(K4 / (L1 * I3)) * np.outer(np.cos(u), np.sin(v))
y = 1 / np.sqrt(K4 / (L2 * I3)) * np.outer(np.sin(u), np.sin(v))
z = 1 / np.sqrt(K4 / (L3 * I3)) * np.outer(np.ones_like(u), np.cos(v))
self.plot(x, y, z)
def mnim_konus(self,L1, L2, L3, u, v):
# 5 5 5 0 0 0 0 0 0 0
self.ui.lineEdit_11.setText("Мнимый конус")
X = u * np.cos(v)
Y = u * np.sin(v)
Z = u
self.plot2(X, Z, Y)
def elip_hyper(self,K4, I2, L1, L2, u, v):
# 1 1 0 0 0 0 -6 6 -4 18
self.ui.lineEdit_11.setText("Элиптический гипербалоид")
X = (1 / (L1) * np.sqrt(-K4 / I2)) * np.cos(u) + v * np.sin(u)
Y = (1 / (L2) * np.sqrt(-K4 / I2)) * np.sin(u) + v * np.cos(u)
Z = (1 / 2) * np.sinh(v)
self.plot(X, Y, Z)
def hyper_parab(self,K4, I2, L1, L2, u, v):
self.ui.lineEdit_11.setText("Гипер парабалоид")
X = (1 / (L1) * np.sqrt(-K4 / I2)) * np.cosh(u) * np.cos(v)
Y = -(1 / (L2) * np.sqrt(-K4 / I2)) * np.cosh(u) * np.sin(v)
Z = (1 / 2) * np.sinh(u)
self.plot2(X, Z, Y)
def elip_cylin(self,K3, I2, L1, L2, X, Z):
# 9 8 0 0 0 0 7 6 0 1
self.ui.lineEdit_11.setText("эллиптический цилиндр")
x = np.linspace(-1, 1, 100)
z = np.linspace(-2, 2, 100)
X, Z = np.meshgrid(x, z)
Y = np.sqrt(1 - (X ** 2 / (-K3 / (L1 * I2))) * (-K3 / (L2 * I2)))
self.plot2(X, Y, Z)
def mnim_elip_cylin(self,K3, I2, L1, L2, X, Y):
self.ui.lineEdit_11.setText("Мнимый эллиптический цилиндр")
x = np.linspace(-1, 1, 100)
z = np.linspace(-2, 2, 100)
X, Z = np.meshgrid(x, z)
Y = np.sqrt((1 - X ** 2 / (K3 / (L1 * I2))) * (K3 / (L2 * I2)))
self.plot2(X, Y, Z)
def hyper_cylin(self,K3, I2, L1, L2, X, Y):
# 5 -5 0 0 0 0 0 0 0 5
self.ui.lineEdit_11.setText("Гипер цилиндр")
u = np.linspace(-2, 2, 100)
v = np.linspace(-2, 2, 100)
[u, v] = np.meshgrid(u, v)
X = (-K3 / (L1 * I2)) * np.sinh(u)
Y = (K3 / (L2 * I2)) * np.cosh(u)
Z = v
self.plot2(X, Y, Z)
def para_peresl_plosk(self,L2, X, Z):
self.ui.lineEdit_11.setText("Пара пересекающихся плоскостей")
Y = np.sqrt(X ** 2)
self.plot2(X, Y, Z)
def parab_cylin(self,K3, I1, X, Z):
# 0 5 0 0 0 0 5 0 0 0
self.ui.lineEdit_11.setText("Парабалический цилиндр")
Y = 2 * X * np.sqrt(-K3 / I1 ** 3)
self.plot(X, Y ** 2, Z)
def parall_plosk(self,K2, I1, X, Z):
# 9 4 0 12 0 0 24 16 0 3
self.ui.lineEdit_11.setText("Пара паралельных плокостей")
Y = K2 / I1 ** 2
self.plot2(X, Y ** 2, Z)
def sovp_plosk(self,X, Y):
self.ui.lineEdit_11.setText("Пара мнимых паралельных плокостей")
x = np.linspace(-2, 2, 100)
z = np.linspace(-2, 2, 100)
X, Z = np.meshgrid(x, z)
Y = 0
self.plot2(X, Y ** 2, Z)
def mnim_parall_plosk(self,K2, I1, X, Y):
self.ui.lineEdit_11.setText("Пара мнимых паралельных плокостей")
x = np.linspace(-2, 2, 100)
z = np.linspace(-2, 2, 100)
X, Z = np.meshgrid(x, z)
Y = -K2 / I1 ** 2
self.plot2(X, Y ** 2, Z)
def plot(self,X, Y, Z):
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=2, cstride=10, linewidth=1, color='blue')
plt.savefig('save.png')
plt.show()
def plot2(self,X, Y, Z):
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=2, cstride=10, linewidth=1, color='blue')
surf = ax.plot_surface(X, -Y, Z, rstride=2, cstride=10, linewidth=1, color='blue')
plt.savefig('save.png')
plt.show()
class Second(QWidget):
def __init__(self):
super().__init__()
self.title = 'PyQt5 image - pythonspot.com'
self.left = 10
self.top = 10
self.width = 1280
self.height = 800
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
# Create widget
label = QLabel(self)
pixmap = QPixmap('save.png')
label.setPixmap(pixmap)
self.resize(pixmap.width(),pixmap.height())
self.show()
if __name__=="__main__":
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())
Используемые переменные:
Имя переменной |
Тип переменной |
Назначение |
scr |
Список |
Массив данных – введенные коэфиценты |
I1,I2,I3,I4,K1,K2,K3,K4 |
Число |
Подсчет инваринтов |
X,Y,Z,U,V |
Список |
Массив данных – значение точек |
Результат работы
ВЫВОДЫ
В ходе лабораторной работы я создал графический интерфейс для своей программы на языке питон с помощью библиотеки PyQt5