当前位置: 首页 > wzjs >正文

校园网站建设教程视频网络营销工具平台

校园网站建设教程视频,网络营销工具平台,自己建一个网站需要什么,淘宝上做网站本代码原来是PySide6官网的一个示例程序,我对其进行的详细的注释,同时增加了一个功能:加载显示cass的地形图坐标数据示例,示例可显示以下几种三维图形 程序运行界面如下: 代码如下: # -*- coding: utf-8 -…

本代码原来是PySide6官网的一个示例程序,我对其进行的详细的注释,同时增加了一个功能:加载显示cass的地形图坐标数据示例,示例可显示以下几种三维图形

程序运行界面如下:

代码如下:

# -*- coding: utf-8 -*-
from __future__ import annotationsimport sys,time,copy,os,random
import numpy as np
from matplotlib.backends.backend_qtagg import FigureCanvas
from matplotlib.figure import Figure
from mpl_toolkits.mplot3d import axes3d
from PySide6.QtCore import Qt, Slot
from PySide6.QtGui import QAction, QKeySequence
from PySide6.QtWidgets import (QApplication, QComboBox, QHBoxLayout,QHeaderView, QLabel, QMainWindow, QSlider,QTableWidget, QTableWidgetItem, QVBoxLayout,QWidget)"""这是一个使用3Dmatplotlib plot 在Qt Widgets上显示三维图形的示例
原版为PySide6官网上的一示例代码,对其进行了详细注解,同时扩展增加了以下一组示例代码
1、从外部导入地形图数据(cass地形测绘数据格式)并进行显示地形三角网"""
class ApplicationWindow(QMainWindow):def __init__(self, parent=None):QMainWindow.__init__(self, parent)self.column_names = ["X向", "Y向", "Z向"]#定义中心窗口,并居中显示self._main = QWidget()self.setCentralWidget(self._main)self.setWindowTitle('PySide6+matplotlib绘制三维图示例')#定义菜单栏self.menu = self.menuBar()self.menu_file = self.menu.addMenu("文件")exit = QAction("离开", self, triggered=qApp.quit)  # noqa: F821self.menu_file.addAction(exit)self.menu_about = self.menu.addMenu("关于")about = QAction("关于Qt", self, shortcut=QKeySequence(QKeySequence.HelpContents),triggered=QApplication.aboutQt)  # noqa: F821self.menu_about.addAction(about)#窗体左侧轮廓:为一视图和标签及滑条self.fig = Figure(figsize=(5, 3))self.canvas = FigureCanvas(self.fig)#左侧滑条控件min = 0max = 360self.slider_azim = QSlider(minimum=min, maximum=max, orientation=Qt.Orientation.Horizontal)self.slider_elev = QSlider(minimum=min, maximum=max, orientation=Qt.Orientation.Horizontal)self.slider_azim_layout = QHBoxLayout()self.slider_azim_layout.addWidget(QLabel(f"{min}"))self.slider_azim_layout.addWidget(self.slider_azim)self.slider_azim_layout.addWidget(QLabel(f"{max}"))self.slider_elev_layout = QHBoxLayout()self.slider_elev_layout.addWidget(QLabel(f"{min}"))self.slider_elev_layout.addWidget(self.slider_elev)self.slider_elev_layout.addWidget(QLabel(f"{max}"))#窗体右侧为一表格控件self.table = QTableWidget()header = self.table.horizontalHeader()header.setSectionResizeMode(QHeaderView.Stretch)#窗体右侧顶部为一组合框控件self.combo = QComboBox()self.combo.addItems(["网格", "表面", "三角网表面", "球面","导入cass地形图","导入散点模型"])#设置窗体右侧布局rlayout = QVBoxLayout()rlayout.setContentsMargins(1, 1, 1, 1)rlayout.addWidget(QLabel("Plot类:"))rlayout.addWidget(self.combo)rlayout.addWidget(self.table)#设置窗体左侧布局llayout = QVBoxLayout()rlayout.setContentsMargins(1, 1, 1, 1)llayout.addWidget(self.canvas, 88)llayout.addWidget(QLabel("方位角:"), 1)llayout.addLayout(self.slider_azim_layout, 5)llayout.addWidget(QLabel("高程:"), 1)llayout.addLayout(self.slider_elev_layout, 5)#窗体总布局采用竖向布局layout = QHBoxLayout(self._main)layout.addLayout(llayout, 70)   #左侧布局占70%layout.addLayout(rlayout, 30)   #右侧布局点30%#定义信号槽绑定self.combo.currentTextChanged.connect(self.combo_option)  #组合框选择项发生变化时self.slider_azim.valueChanged.connect(self.rotate_azim)   #方位角(XY平面)滑条控件值发生变化时self.slider_elev.valueChanged.connect(self.rotate_elev)   #方位角(Z向)滑条控件值发生变化时#初始化视图显示self.plot_wire()    #默认加载self._ax.view_init(30, 30)self.slider_azim.setValue(30)self.slider_elev.setValue(30)self.fig.canvas.mpl_connect("button_release_event", self.on_click)   #左侧画布视图单击后鼠标释放时信号#槽函数: 单击Matplotlib视时发出的信号def on_click(self, event):azim, elev = self._ax.azim, self._ax.elevself.slider_azim.setValue(azim + 180)self.slider_elev.setValue(elev + 180)# 设置表格中的数据:传入XYZ数据(数据是一个np一维数组)def set_table_dataS(self, xS, yS, zS):for i in range(len(xS)):self.table.setItem(i, 0, QTableWidgetItem(f"{xS[i]:.2f}"))self.table.setItem(i, 1, QTableWidgetItem(f"{yS[i]:.2f}"))self.table.setItem(i, 2, QTableWidgetItem(f"{zS[i]:.2f}"))#重绘视图和表格时,当前的XYZ数据集def set_canvas_table_configuration(self, row_count, dataS):self.fig.set_canvas(self.canvas)self._ax = self.canvas.figure.add_subplot(projection="3d")self._ax.set_xlabel(self.column_names[0])    #表格的0例数据全部导入到视图的的xself._ax.set_ylabel(self.column_names[1])    #表格的0例数据全部导入到视图的的yself._ax.set_zlabel(self.column_names[2])    #表格的0例数据全部导入到视图的的zself.table.setRowCount(row_count)self.table.setColumnCount(3)self.table.setHorizontalHeaderLabels(self.column_names)self.set_table_dataS(dataS[0], dataS[1], dataS[2])# Plot 绘制样式:#视图和表格中数据为四边形网(无表面)def plot_wire(self):#产生示例数据: np二维数组->(200,200)self.X, self.Y, self.Z = axes3d.get_test_data(0.03)    #从axes3d类中得到示例数据self.set_canvas_table_configuration(len(self.X[0]), (self.X[0], self.Y[0], self.Z[0]))self._ax.plot_wireframe(self.X, self.Y, self.Z, rstride=10, cstride=10, cmap="viridis")self.canvas.draw()#视图和表格中数据为漏斗型表面def plot_surface(self):#产生示例数据: np二维数组->(30,30)self.X, self.Y = np.meshgrid(np.linspace(-6, 6, 30), np.linspace(-6, 6, 30))   self.Z = np.sin(np.sqrt(self.X ** 2 + self.Y ** 2))self.set_canvas_table_configuration(len(self.X[0]), (self.X[0], self.Y[0], self.Z[0]))self._ax.plot_surface(self.X, self.Y, self.Z,rstride=1, cstride=1, cmap="viridis", edgecolor="none")self.canvas.draw()#视图和表格中数据为三角网表面def plot_triangular_surface(self):#产生示例数据: np一维数组->(289,)radii = np.linspace(0.125, 1.0, 8)angles = np.linspace(0, 2 * np.pi, 36, endpoint=False)[..., np.newaxis]self.X = np.append(0, (radii * np.cos(angles)).flatten())self.Y = np.append(0, (radii * np.sin(angles)).flatten())self.Z = np.sin(-self.X * self.Y)self.set_canvas_table_configuration(len(self.X), (self.X, self.Y, self.Z))self._ax.plot_trisurf(self.X, self.Y, self.Z, linewidth=0.2, antialiased=True)self.canvas.draw()#视图和表格中数据为球面def plot_sphere(self):#产生示例数据: np二维数组->(100,100)u = np.linspace(0, 2 * np.pi, 100)v = np.linspace(0, np.pi, 100)self.X = 10 * np.outer(np.cos(u), np.sin(v))self.Y = 10 * np.outer(np.sin(u), np.sin(v))self.Z = 9 * np.outer(np.ones(np.size(u)), np.cos(v))self.set_canvas_table_configuration(len(self.X), (self.X[0], self.Y[0], self.Z[0]))  #按当前球面的数据重新填写表格self._ax.plot_surface(self.X, self.Y, self.Z)self.canvas.draw()
#--------------------------------------------------------------------------------------------------------------------------------------------------------------#自定义数据1:视图和表格中数据为从外部文件导入地形图数据: 本例导入CASS的抄测地形坐标文件def plot_loadMapDatas(self):#导入的示例数据: np二维数组->(526,5)self.loadMapData('cass格式地形95个点.DAT')self.cassXyz=self.cass_Datas[:,2:5]self.X = self.cass_Datas[:,2:3].reshape(int(self.cass_Datas[:,2:3].size))  self.Y = self.cass_Datas[:,3:4].reshape(int(self.cass_Datas[:,3:4].size)) self.Z = self.cass_Datas[:,4:5].reshape(int(self.cass_Datas[:,4:5].size)) self.set_canvas_table_configuration(len(self.X), (self.X, self.Y, self.Z))self._ax.plot_trisurf(self.X, self.Y, self.Z, linewidth=0.2, antialiased=True)self.canvas.draw()#自定义数据2:视图和表格中数据为从外部文件导入散点模形def plot_load3DSapeDatas(self):#产生示例数据: np二维数组->(n,8)passself.canvas.draw()#从外部地形数据文件导入全部点的坐标数据,示例采用CASS的dat格式数据 二维数组(n,5):如:1,,86240.8790,87568.3282,252.6600#导入cass软件用的dat测绘数据def loadMapData(self,mapDataFile,type=0):s=''lstRowData=[]lstData=[]index=0#以下四个变量用于测试坐标点文件中是否存在差距较大的数,以提醒修改,如不修改,可能偏差点会对计算结果影响较大minXYZ=[1000000,1000000,1000000]maxXYZ=[0,0,0]self.minXYZid=[0,0,0]self.maxXYZid=[0,0,0]if(os.path.exists(mapDataFile)):rf = open(mapDataFile,'r',encoding='utf-8')lindS=''for lineS in rf.readlines():lstRowData.clear()s=lineS.strip()s=s.replace("\n","")  #将从文件中读出的\n删除,此语句可能会报异常s=s.replace("\r","")  #将从文件中读出的\r删除,此语句可能会报异常if(s==''):continue  #去空行lstRowData = s.split(',')if(len(lstRowData)!=5):continue  #去格式不对的行(要求每行5个数据,4个逗号)lstRowData[0]=index  #重新为数据编号if(len(str(lstRowData[1]))!=0): lstRowData[1]=1                  #对第二个参数不为空时,改其值为1,否则为0else:lstRowData[1]=0lstRowData[2]=float(lstRowData[2])   #dat文件中的坐标x坐标lstRowData[3]=float(lstRowData[3])   #dat文件中的坐标y坐标lstRowData[4]=float(lstRowData[4])   #dat文件中的坐标z坐标lstData.append(copy.deepcopy(lstRowData))#以下对导入的点作最大最小值记录if(minXYZ[0]>lstRowData[2]):minXYZ[0]=lstRowData[2]self.minXYZid[0]=indexif(minXYZ[1]>lstRowData[3]):minXYZ[1]=lstRowData[3]self.minXYZid[1]=indexif(minXYZ[2]>lstRowData[4]):minXYZ[2]=lstRowData[4]self.minXYZid[2]=indexif(maxXYZ[0]<lstRowData[2]):maxXYZ[0]=lstRowData[2]self.maxXYZid[0]=indexif(maxXYZ[1]<lstRowData[3]):maxXYZ[1]=lstRowData[3]self.maxXYZid[1]=indexif(maxXYZ[2]<lstRowData[4]):maxXYZ[2]=lstRowData[4]self.maxXYZid[2]=indexindex+=1rf.closeprint(f'\n minXYZid={self.minXYZid}\n maxXYZid={self.maxXYZid}\n')self.pointCount=len(lstData)          #记录本数据文件的总坐标点数self.cass_Datas=np.array(lstData)      #保存全部的np原始数据#开始处理原始数据print(f'导入cass测绘数据文件"{mapDataFile}"成功!')  return Truereturn False#-------------------------------------------------------------------------------------------------------------------------------------------------------------#槽函数:组合框选择项发生变化时@Slot()def combo_option(self, text):if text == "网格":self.plot_wire()elif text == "表面":self.plot_surface()elif text == "三角网表面":self.plot_triangular_surface()elif text == "球面":self.plot_sphere()elif text == "导入cass地形图":self.plot_loadMapDatas()elif text == "导入散点模型":pass     #暂未扩展#方位角(XY平面)滑条控件值发生变化时槽函数@Slot()def rotate_azim(self, value):self._ax.view_init(self._ax.elev, value)self.fig.set_canvas(self.canvas)self.canvas.draw()#方位角(Z向)滑条控件值发生变化时槽函数@Slot()def rotate_elev(self, value):self._ax.view_init(value, self._ax.azim)self.fig.set_canvas(self.canvas)self.canvas.draw()if __name__ == "__main__":app = QApplication(sys.argv)w = ApplicationWindow()w.setFixedSize(1280, 720)w.show()app.exec()

扩展导入的示例cass地形坐标文件内容如下,copy出来后粘贴到记事本另存文件为“cass格式地形95个点.DAT”,将此文件同代码模块文件放在一个目录里即可

1,,8535.0620,20831.2885,384.9640
2,,8564.7031,20818.7979,386.8800
3,,8566.4578,20824.8254,386.8800
4,,8580.2215,20819.2465,388.0300
5,,8590.5382,20815.9465,388.7660
6,,8525.9910,20830.1208,377.0900
7,,8502.7606,20839.6356,383.2100
8,,8537.2997,20855.6420,385.0000
9,,8537.6544,20857.5221,385.0000
10,,8531.2665,20856.1611,385.3500
11,,8534.0532,20857.8461,385.3500
12,,8533.6219,20853.4993,385.3500
13,,8595.2543,20819.8627,391.3100
14,,8558.8369,20813.6480,387.1910
15,,8576.1126,20813.9809,388.4000
16,,8582.0086,20813.3326,388.7660
17,,8574.6472,20807.6877,388.2800
18,,8578.2663,20799.6209,387.8800
19,,8581.3061,20806.9918,388.7000
20,,8544.7344,20858.6430,384.0600
21,,8546.2683,20821.1758,385.8000
22,,8550.3724,20833.8913,385.5660
23,,8544.0034,20833.0925,385.4460
24,,8597.5370,20808.7561,390.1870
25,,8588.3263,20809.5540,389.2140
26,,8581.5961,20810.1927,388.7600
27,,8575.4039,20810.7972,388.3400
28,,8569.2116,20813.0327,387.9020
29,,8560.1202,20816.6382,387.2510
30,,8548.2657,20828.3883,385.8600
31,,8547.2163,20833.4220,385.5060
32,,8546.3340,20840.2102,385.0240
33,,8545.5363,20848.8394,384.7000
34,,8553.8038,20819.7866,386.7750
35,,8550.7684,20823.7166,386.2300
36,,8544.1572,20863.7326,383.6830
37,,8543.6784,20868.8701,383.3000
38,,8529.1556,20863.1078,383.3000
39,,8533.9251,20864.9365,383.3000
40,,8538.7670,20866.7411,383.3000
41,,8548.0837,20870.6865,383.3000
42,,8540.6612,20862.3642,383.6830
43,,8536.5205,20861.3426,383.6830
44,,8531.3321,20860.6948,383.6830
45,,8541.7397,20859.0886,384.0600
46,,8538.8243,20859.4973,384.0600
47,,8528.7124,20850.9021,384.1650
48,,8521.5594,20849.2209,384.1650
49,,8511.9518,20846.3489,384.1650
50,,8531.5137,20846.2046,384.6400
51,,8537.3263,20847.9737,384.6400
52,,8533.9232,20839.3649,384.9640
53,,8540.2409,20839.6848,384.9640
54,,8540.3997,20832.9546,385.4460
55,,8526.7023,20856.3875,384.0600
56,,8520.6090,20855.1941,384.0600
57,,8512.6042,20852.9863,384.0600
58,,8503.9422,20850.4801,384.0600
59,,8499.1817,20849.5675,384.0600
60,,8527.0635,20859.6211,383.6830
61,,8520.2142,20858.3600,383.6830
62,,8511.2339,20856.1466,383.6830
63,,8503.0271,20854.0863,383.6830
64,,8495.8691,20853.3912,383.6830
65,,8585.2618,20790.1975,391.2700
66,,8583.4519,20792.3716,389.6900
67,,8526.2071,20833.0721,377.0900
68,,8511.7583,20834.1661,377.2200
69,,8501.9803,20833.0331,377.2200
70,,8485.7633,20837.8191,377.2800
71,,8480.4063,20841.6261,377.4100
72,,8483.0683,20846.3021,378.1000
73,,8596.9664,20786.3285,391.8000
74,,8587.9307,20791.0655,390.0370
75,,8586.8727,20802.9864,389.1540
76,,8596.9759,20800.4602,390.0300
77,,8565.5924,20800.8019,386.6600
78,,8521.5125,20838.1220,380.1400
79,,8487.6261,20847.4016,378.7800
80,,8497.7541,20845.0826,378.7100
81,,8494.2471,20850.5446,381.6400
82,,8514.0502,20841.4980,383.2100
83,,8524.2421,20843.4686,384.2000
84,,8541.1481,20826.6746,384.7300
85,,8561.0611,20806.2766,386.6300
86,,8547.6462,20816.0442,386.0600
87,,8557.0848,20809.5790,387.1910
88,,8566.6440,20805.8867,387.8420
89,,8580.9124,20803.9858,388.7000
90,,8558.3059,20823.0354,386.8800
91,,8570.3499,20819.9284,388.0300
92,,8587.7689,20820.1814,389.6800
93,,8571.6399,20826.1884,388.0000
94,,8556.9299,20831.2744,386.4100
95,,8550.9689,20844.2314,385.2700


文章转载自:

http://OC1uyO6E.LrfLh.cn
http://Ztcr9Luk.LrfLh.cn
http://abLaFvgR.LrfLh.cn
http://Dqklsmxd.LrfLh.cn
http://fp6Ll7ll.LrfLh.cn
http://5fD8ARl9.LrfLh.cn
http://XXVLCUlP.LrfLh.cn
http://wQSituK7.LrfLh.cn
http://dJ5vsF9k.LrfLh.cn
http://CENIc0im.LrfLh.cn
http://fsVy73Pq.LrfLh.cn
http://yHAXOcnn.LrfLh.cn
http://AjYubMFI.LrfLh.cn
http://2YXBhZtD.LrfLh.cn
http://QT5n1ujm.LrfLh.cn
http://1kbSaYxk.LrfLh.cn
http://hYe2rxGI.LrfLh.cn
http://RQyucrC1.LrfLh.cn
http://EpKLXiQE.LrfLh.cn
http://1ccrlCa0.LrfLh.cn
http://HVlL1Rys.LrfLh.cn
http://l7omX6CC.LrfLh.cn
http://RdhEgi7k.LrfLh.cn
http://L7uC6alK.LrfLh.cn
http://oW1uzX1D.LrfLh.cn
http://r0iPJB71.LrfLh.cn
http://OjNZZ1Jy.LrfLh.cn
http://SAzlgQ7n.LrfLh.cn
http://6YZq71gz.LrfLh.cn
http://clpkkfE8.LrfLh.cn
http://www.dtcms.com/wzjs/657412.html

相关文章:

  • wordpress电影资源网站专业人士怎样建网站
  • 有人在相亲网站骗人做传销word链接点进去是网站怎么做
  • 依兰县建设局网站广州建网站多少钱
  • ps做网站首页规范尺寸网站制作方案书
  • 汽车网站建设微网站建设申请报告
  • 如何免费创建自己的网站平台开发一平方多少钱
  • 网站的关键词搜索怎么做如何在中国建设银行网站转账
  • 安全狗 网站打不开公司网站应该怎么做
  • 中国建设银行网站的机构端午节ppt模板免费下载
  • 网站建设关于网上书店图片素材微机做网站的软件
  • 深圳网站设计多少钱织梦网站开发语言
  • 动态页网站网站内链
  • 怎么用ip地址做网站怀化市住房和城乡建设局网站
  • 揭阳网站建设维护天马网络 网站建设
  • 透明管理系统网站模板最权威的网站推广设计
  • 网站建设 dw 时间轴网站开发新加坡
  • 长春火车站到龙嘉机场怎么走好用的h5制作软件
  • 工作了应该浏览器哪些网站温州易富信息技术有限公司
  • win10建设网站目录什么是工具型网站
  • 电商网站开发进度表清远网站推广优化公司
  • 三亚网站开发公司哈尔滨自助板建站
  • 怎么创建网站平台赚钱做英文小说网站
  • 张店学校网站建设公司wordpress插件排列
  • 大型企业网站欣赏西安百度首页优化
  • 湘潭做网站选择磐石网络如何建立公司网站账号
  • 企业邮箱注册申请免费注册入口东莞网站优化怎样
  • 佛山网站建设公司怎么选重庆营销网站建设
  • 网站建设怎么开发客户男的女的做那个视频网站
  • 自己做的网站如何上传网上学生个人网站作品
  • 公司网站制作步骤流程图网站建设模板哪里有