怎样用VB怎样建立三维坐标系?

用VB代码建立直角坐标系外加代码做出一个长方体,我怎么也想不出来一个好的办法真是要命,哪位神仙能慷慨解囊,帮帮俺,真的是万分感谢!!!!... 用VB代码建立直角坐标系外加代码做出一个长方体,我怎么也想不出来一个好的办法真是要命,哪位神仙能慷慨解囊,帮帮俺,真的是万分感谢!!!! 展开
 我来答
匿名用户
2013-05-06
展开全部
http://petrolist.blog.163.com/blog/static/88508439200810104315168/ VB 对surfer 绘制的等值线图局部放大后的坐标定位中的应用石油软件 2008-11-10 16:31 阅读22 评论0 字号: 大大 中中 小小 巩天宁,潘地林,陈旭辉
(安徽理工大学计算机科学与工程学院,安徽淮南232001)
摘要:针对使用VB 调用surfer 软件提供的自动化接口,在绘制等值线图的过程中调用外部控件进行图片放大后,无
法定位坐标以得到图片中任意网格点的三维值问题,文章提出使用VB 的PaintPicture 函数放大surfer 软件生成的等值线
图,并通过导入surfer 软件生成的grd 文件,推算图片中任意一点所处的网格点以获取该点的三维值的方法。
关键词:Surfer 软件;自动化;等值线图;坐标定位;VB 嵌入式编程0 引言
Surfer 软件是美国Golden Software 公司研制开发的基于Windows 操作系统的二维和三维绘图软件,它不仅提供了丰富的网格化和插值算法,还具有强大的绘制等值线图及相应的三维图形的能力,是科技工作者特别是地学研究人员必备的软件。该软件提供了可嵌入编程的接口,Surfer 服务器在后台运行,可以完全摆脱Surfer 的主控界面,在客户程序界面中通过VB 嵌入式编程快速实现等值线图的绘制。
对等值线图常需要作两种处理:局部放大和获取特定点的三维值。加载AutoCAD Voloview Express 控件可以做到对图片的放大、缩小、移动等。Surfer 导出的grd 文件是用选定的插值算法推算出的等值线图中网格点的三维值(X、Y、Z 坐标的值)文件,通过分析grd 文件可获取图片内所有网格点的三维值。但使用外部控件放大等值线图后,坐标无法定位就成了获取特定点的三维值的障碍。
本文使用VB 自带的PaintPicture 方法编写图片放大函数,同时计算放大域内的网格行列数及放大域的起始网格位,从而在放大后的图片中精确地推算出某点的网格坐标,确定其三维值。
1 具体流程
笔者参与的煤矿压力报警项目中,需要调用Surfer 绘制等值线图,绘制完等值线图后需要根据客户要求局部放大图片,同时还需在任意时刻提供客户关心点的三维值。这些工作的流程如下:
判断Surfer 对象是否创建,如果没有创建则创建,完成后导入原始数据并使用选定的算法对其网格化插值后生成grd 文件。分析Surfer 生成的grd 文件,提取图片上网格的行数、列数、网格坐标最小X 值与最大X 值、网格坐标最小Y 值与最大Y 值、所有网格的Z 值,分别保存在变量rows、cols、Hmin、Hmax、Vmin、Vmax 和一个data 数组中。
计算出每个网格在等值线图坐标轴上横坐标和纵坐标上的跨度:Hdeta=(Hmax- Hmin)/(cols- 1)、Vdeta=(Vmax- Vmin)/(rows- 1);计算每个网格在VB 图片框中X 轴和Y 轴上所占的长度:SwPerGrid=Picture.ScaleWidth/cols、ShPerGrid=Picture.ScaleHeight/rows。 如果用户需要放大图片的某一部分,则获取放大域在VB 图片框坐标系中的始坐标和末坐标(x1,y1)、(x2,y2),分别换算或在网格坐标系中的位置(X1grid、Y1grid)、(X2grid、Y2grid),换算公式:Xgrid=Int (x/SwPerGrid)、Ygrid=rows- 1- Int (y/ShPerGrid);计算放大域中网格的行列数并从data 数组中提取选择域内所有
网格的Z 值;使用PaintPicture 函数放大选择域;重新计算Hmin、Vmin、SwPerGrid 和ShPerGrid 值。 如果用户需要图片中某点的三维值,则根据该点在VB 图片框坐标系中的位置换算出其在网格坐标系的位置(按前面的换算公式);通过网格坐标计算该点三维值:X=Xgrid*Hdeta+Hmin、Y=Ygrid*Vdeta+Vmin、Z=data Ygrid,Xgrid)。 简化的流程图如图1 所示。2 程序设计
为简化步骤,使用surfer 软件绘制的等值线图和该图的grd 文件已经准备好放在程序文档中,不需要在试验程序中调用surfer 软件现场绘制等值线图并生成grd 文件。以下仅给出主要部分的伪代码。
⑴ 定义图片框picture1、picture2,载入Surfer 生成的等值线图后从grd 文件中提取rows、cols、Hmin、Hmax、Vmin、Vmax、data(),并计算Hdeta、Vdeta、SwPerGrid、ShPerGrid(代码略)。
⑵ 监听图片框1 的鼠标移动事件,分别在三个标签栏中显示鼠标所在点的三维值;监听图片框2 的鼠标按下事件,记录其位置(代码略);监听图片框2 的鼠标移动事件,如果之前发生了按下事件,则绘制矩形框以标示出选择放大区域(代码略);监听图片框2 的鼠标松开事件,记录其位置,计算选择区内的网格数,保存选择区内网格点的Z 值到数组,放大图片。
Private Sub Picture1_Mous eMove(Button As Integer, Shift As
Integer,X As Single, Y As Single)
SwPerGrid=Picture1.ScaleWidth/cols
// 计算每个网格在VB 图片框中所占的宽度
ShPerGrid=Picture1.ScaleHeight/rows
// 计算每个网格在VB 图片框中所占的高度
Xgrid=Int(X/SwPerGrid)
// 计算选中的点所在的网格横坐标
Ygrid=rows -1-Int(Y/ShPerGrid)
// 计算选中的点所在的网格纵坐标
Label1.Caption=Xgrid*Hdeta+Hmin
Label2.Caption=Ygrid*Vdeta+Vmin
Label3.Caption=pdata(Ygrid,Xgrid)
// 分别计算并显示该点的三维值
End Sub
Private Sub Picture2_Mous eUp(Button As Integer,Shift As
Integer,X As Single,Y As Single)
X1grid=Int(X1/SwPerGrid)Y1grid=rows -1-Int(Y1/ShPerGrid)
// 计算始坐标在网格中的位置
X2grid=Int(X2/SwPerGrid)
Y2grid=rows -1-Int(Y2/ShPerGrid)
// 计算末坐标在网格中的位置
rows=Y1grid-Y2grid+1
cols=X2grid-X1grid+1
// 计算选中区域内网格的行数和列数
Picture1.PaintPicture Picture2 的放大域
For i=0 To rows -1
For j=0 To cols -1
pdata(i,j)=data(Y2grid+i,X1grid+j)
// 将选中区域内的数据保存
End Sub
2.3 程序运行结果
本程序实现了客户需求:可以放大图片的任意区域,并且放大后可以准确定位某点的三维值。如图2 所示:左边为图片框1,右边为图片框2,客户可以在图片框2 中任意选择一块区域,选择的区域会放大填充到图片框1,并且在图片框1 中滑动鼠标可以在三个label 中显示鼠标所在点的三维值。
匿名用户
2013-05-06
展开全部
Sub PutPixel3D(Object As PictureBox,x As Integer,y As Integer,z As Integer,Color As Long)Object.PSet (x+z,y+z),ColorEnd Sub这个程序可以在一个图片框中以三维坐标画点
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式