189 8069 5689

vb.net3维坐标的简单介绍

怎么利用VB.NET实现三维绘图

数学上不是有斜二测画法,算好坐标即可画出

为吕梁等地区用户提供了全套网页设计制作服务,及吕梁网站建设行业解决方案。主营业务为成都做网站、网站设计、吕梁网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

或者用AnyCAD的.Net图形控件

也可以调用matlab 实现

vb.net怎么自定义坐标系

scale(x1,y1)-(x2,y2)

你只要记住,这里的x1,y1是左上角的坐标,x2,y2是右下角的坐标,通过这两个点的坐标设定,就可以决定坐标原点的位置以及坐标轴的方向了,比如

Scale (-300,200)-(300,-200)

以上是把坐标原点设在窗体中心,x轴长600,方向从左到右,y轴长400,方向从下向上。

Scale (800,0)-(0,600)

以上是把坐标原点设在窗体右上角,x轴长800,方向从右到左,y轴长600,方向从上向下。

下面说坐标轴和原点的标示法:

假定自定义坐标设为:

Scale (-300, 200)-(300, -200)

Line (-300, 0)-(300, 0) '画x轴

Line (0, 200)-(0, -200) '画y轴

CurrentX = 290

CurrentY = -5

Print "x" '标示x轴

CurrentX = 5

CurrentY = 200

Print "y" '标示y轴

CurrentX = 5

CurrentY = -5

Print "0" '标示原点

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

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 中显示鼠标所在点的三维值。

VB.NET坐标变换

Dim g As Graphics = PictureBox1.CreateGraphics

g.TranslateTransform(2, 2) ‘定义原点坐标

g.ScaleTransform(1, -1) ’X轴不变,反转Y轴

以PictureBox1中(2,2)点为新的原点(0,0)

向右为X轴正方向 向上为Y轴正方向


新闻标题:vb.net3维坐标的简单介绍
本文地址:http://cdxtjz.cn/article/phcgoj.html

其他资讯