Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба5

.docx
Скачиваний:
8
Добавлен:
18.12.2019
Размер:
190.52 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

старший преподаватель

Н.А. Соловьева

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №5

Графический интерфейс приложения

по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4616

А.В.Павлов

подпись, дата

инициалы, фамилия

Санкт-Петербург 2018

  1. ПОСТАНОВКА ЗАДАЧИ

Разработать графический интерфейс программы

ЗАДАНИЕ: Построение поверхностей второго порядка

  1. ОПИСАНИЕ РАЗРАБОТАННОЙ ПРОГРАММЫ

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

Соседние файлы в предмете Технология программирования