Visual Basic 平面图形的几何变换

在计算机绘图中,通常需要将画出的图形平行移到一个位置,或改变图形大小及形状等。二维图形的几何变换包括平移变换、比例变换、旋转变换和镜像变换。

1. 平移图形

将图形上的点(X,Y)分别在水平方向和垂直方向移动Sx,Sy,变换后点(X ′,Y′)坐标值为:

X′= X + Sx

Y′= Y + Sy

如果Sx=0,垂直方向移动,Sy为0时水平方向移动。

2. 比例变换

以原点为中心,将图形各坐标点的XY分量分别乘以Sx,Sy,则可使图形进行整体放大或缩小。这时,

X′= X × Sx

Y′= Y × Sy

当Sx=Sy时,图形作相似变换。当Sx≠Sy时,图形产生变形。

3. 旋转图形

以原点为中心,将点(X ,Y )旋转θ角度而得到的新的坐标(X ′,Y′)的变换称为旋转变换。其数学表达式为:

X′= xCosθ - ysinθ

Y′= xsinθ + ycosθ

4. 镜像变换

要进行图形的镜像变换,首先应选择一个合适的对称轴。这个对象轴可以是X轴、Y轴、原点,也可以是任意一条直线。例如,点(X ,Y)的镜像变换:

  • 以X轴为对称的镜像变换式为:X′= X,Y′= -Y
  • 以Y轴为对称的镜像变换式为:X′= -X,Y′= Y
  • 以原点为对称的镜像变换式为:X′= -X,Y′= -Y
  • 以45o直线为对称的镜像变换式为:X′= Y,Y′= X
  • 以-45o直线为对称的镜像变换式为:X′= -Y,Y′= -X

【例8.4】 平移三阶曲线:

在窗体上添加一个图片框Picture1、命令按钮数组Command1,如图8.11所示。

图8.11 平移三阶曲线函数

编写命令按钮的Click事件代码:

Private Sub Command1_Click(Index As Integer)

Dim xx, yy, a

Dim x1, y1, px, py, x0, y0

x0 = 120: x1 = 180: y1 = 100

a = y1 / (x1 * (x1 - x0) * (x1 + x0))

Select Case Index

Case 0 '画曲线

Picture1.Scale (0, 0)-(640, 480)

Picture1.Cls

For x = -180 To 180 Step 2

y = a * x * (x - x0) * (x + x0)

px = 320 + x

py = 240 - y

Picture1.PSet (px, py)

Next x

Case 1 '水平平移

Picture1.Scale (0, 0)-(640, 480)

Picture1.Cls

For xx = -50 To 50 Step 5

For x = -180 To 180 Step 2

y = a * x * (x - x0) * (x + x0)

px = 320 + x + xx

py = 240 - y

Picture1.PSet (px, py)

Next x

Next xx

Case 2 '垂直平移

Picture1.Scale (0, 0)-(640, 480)

Picture1.Cls

i = 1

For yy = -150 To 150 Step 75

i = i + 1

For xx = -50 To 50 Step 5

For x = -180 To 180 Step 2

y = a * x * (x - x0) * (x + x0)

px = 320 + x + xx

py = 240 - y - yy

If x = -180 Then '变换曲线颜色

Picture1.PSet (px, py)

Else

Picture1.PSet (px, py), QBColor(i)

End If

Picture1.Line -(px, py), QBColor(i)

Next x

Next xx

Next yy

Case 3 '退出

End

End Select

End Sub

日常生活中见到的美术图案,如织物图案、装饰图案等,大多是将一个图案单元或几个图案单元进行组合和排列,从而形成一幅美丽的图案。

相关推荐
菜鸟小芯3 小时前
OpenHarmony环境搭建——01-Windows系统下安装Git
windows·git
吕了了3 小时前
电脑磁盘究竟如何分区才最合适?系统和软件如何管理才最好?给出推荐方案!
运维·windows·电脑·系统
Halo_tjn3 小时前
Java 多线程机制
java·开发语言·windows·计算机
李嘉真4 小时前
使用Ventoy制作U盘WindowsToGo系统,让电脑从U盘启动和使用多种系统
运维·windows
Genevieve_xiao4 小时前
【dl】【WSL2】如何获得“Winux”?Windows 上的 Linux 子系统 —— 比虚拟机更好的选择
linux·运维·windows
ulias2124 小时前
list的实现和使用
数据结构·windows·list
課代表5 小时前
Windows 批处理 bat 变量扩展名
windows·命令行·bat·批处理·扩展名·递归遍历·后缀名
电脑小管家5 小时前
路由器怎么重新设置wifi密码
网络·windows·计算机外设·智能路由器·电脑
yuezhilangniao5 小时前
Windows 系统变量未完全清楚 - 代理执行一半 导致 pip 和 Postman 连接失败的解决指南
windows·postman·pip