Visual Basic 平面图形的几何变换

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

1. 平移图形

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

X′= X + Sx

Y′= Y + Sy

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

2. 比例变换

以原点为中心,将图形各坐标点的X 、Y分量分别乘以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

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

相关推荐
瑶山2 小时前
Windows + WSL2 Ubuntu + VS Code配置C++开发环境
开发语言·c++·windows·vscode·wsl
在角落发呆3 小时前
一键脚本配置备份方法:从 Shell 脚本到自动备份
网络·windows
水饺编程4 小时前
第1章,[Win32 章节]:在 VS2019 里面安装 MSDN
c语言·c++·windows·visual studio
水饺编程4 小时前
第1章,[Win32 章节]:编程环境与 MSDN
c语言·c++·windows·visual studio
丨白色风车丨5 小时前
Python中JSON与字典/列表的相互转换详解
windows·python·json
H.莓飛5 小时前
【C++】类与对象(末):static、友元与拷贝优化
linux·开发语言·c++·visual studio
瑶山5 小时前
Windows 11 一键安装命令安装 WSL2到D盘
windows·wsl
bug和崩溃我都要14 小时前
QT 开发的专业截图录屏工具 - macOS版 / Windows版
windows·qt·mac·录屏·截屏
kimloner14 小时前
开源一个 376KB 的 Windows 桌面小工具:便签 + 截图标注 + OCR + 待办提醒(C# / WinForms)
windows·开源·c#·ocr·winforms
摸鱼 特供版14 小时前
一款边录边标注的轻量截图录屏工具
windows·学习·电脑·音视频·软件需求