二维图形的几何变换

1、基本几何变换及变换矩阵

基本几何变换都是相对于坐标原点和坐标轴进行的几何变换,有平移、比例、旋转、反射和错切等。

1.1 平移变换

是指将p点沿直线路径从一个坐标位置移到另一个坐标位置的重定位过程。他是一种不产生变形而移动物体的刚体变换(rigid-body transformation),如下图所示。

 图1-1 平移变换

    推导:

    求得平移变换矩阵如下:

 其中Tx,Ty称为平移矢量。

 

1.2 缩放变换

缩放变换是指对p点相对于坐标原点沿x方向放缩Sx倍,沿y方向放缩Sy倍。其中Sx和Sy称为缩放系数。

图1-2缩放变换(Sx=2,Sy=3)

   推导:

   矩阵:

缩放变换可改变物体的大小,如下图所示。当Sx=Sy >1时,图形沿两个坐标轴方向等比例放大;当Sx=Sy<1,图形沿两个坐标轴方向等比例缩小;当Sx≠Sy,图形沿两个坐标轴方向作非均匀的比例变换。

图1-3比例变换
(a)Sx与Sy相等                                                      (b)Sx与Sy不相等  

 

1.3 旋转变换

二维旋转是指将p点绕坐标原点转动某个角度(逆时针为正,顺时针为负)得到新的点p’的重定位过程。

图1-4旋转变换

    推导:利用极坐标方程

 逆时针旋转θ角的矩阵如下:

 

1.4 对称变换

对称变换后的图形是原图形关于某一轴线或原点的镜像。

图1-5对称变换

  (1)关于x轴对称

图1-6关于x轴对称

 (2)关于y轴对称

图1-7关于y轴对称

 (3)关于原点对称

图1-8关于原点对称

  (4)关于y=x轴对称

图1-9关于y=x轴对称

  (5)关于y=-x轴对称

图1-10关于y=-x轴对称

 

1.5 错切变换

错切变换也称为剪切、错位变换,用于产生弹性物体的变形处理。

图1-11错切变换

 错切变换的变换矩阵为:

    (1)沿x方向错切:b=0
    (2)沿y方向错切:c=0
    (3)两个方向错切:b和c都不等于0。

2、 复合变换

如果图形要做一次以上的几何变换,那么可以将各个变换矩阵综合起来进行一步到位的变换。复合变换有如下的性质:

1)复合平移

对同一图形做两次平移相当于将两次的平移两加起来:

2)复合缩放

两次连续的缩放相当于将缩放操作相乘:

3)复合旋转

两次连续的旋转相当于将两次的旋转角度相加:

缩放、旋转变换都与参考点有关,上面进行的各种变换都是以原点为参考点的。如果相对某个一般的参考点(xfyf)作缩放、旋转变换,相当于将该点移到坐标原点处,然后进行缩放、旋转变换,最后将(xfyf)点移回原来的位置。

4)关于(xfyf)点的缩放变换

5)绕(xfyf)点的旋转变换

 

3、二维图形几何变换的计算

几何变换均可表示成P’=P*T的形式

(1)点的变换:先将点表示为规范化齐次坐标形式,再乘以变换矩阵。

(2)直线的变换:将直线的两个端点表示为规范化齐次坐标形式,再乘以变换矩阵。

(3)多边形的变换:将多边形的顶点表示为规范化齐次坐标形式,再乘以变换矩阵。

 (4)曲线的变换:将曲线的每个点表示为规范化齐次坐标形式,再乘以变换矩阵。

4、复合变换的矩阵点乘的先后问题

1)如果采用以下方式计算几何变换的变换矩阵:

如上范例所示,其先执行变换的矩阵放在前面,后执行变换的矩阵放在后面。

2)如果采用以下方式计算几何变换的变换矩阵:

如上范例所示,其先执行变换的矩阵放在后面,后执行变换的矩阵放在前面。

这是因为矩阵的特性:

  • 13
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
C#中可以使用System.Windows.Media命名空间下的Transform类来进行二维图形几何变换。 以下是几种常见的二维图形几何变换: 1. 平移:通过TranslateTransform类实现,指定平移的水平和垂直距离。 ```csharp TranslateTransform transform = new TranslateTransform(xOffset, yOffset); myShape.RenderTransform = transform; ``` 2. 旋转:通过RotateTransform类实现,指定旋转的角度和旋转中心点。 ```csharp RotateTransform transform = new RotateTransform(angle, centerX, centerY); myShape.RenderTransform = transform; ``` 3. 缩放:通过ScaleTransform类实现,指定横向和纵向的缩放比例。 ```csharp ScaleTransform transform = new ScaleTransform(scaleX, scaleY); myShape.RenderTransform = transform; ``` 4. 扭曲:通过SkewTransform类实现,指定横向和纵向的扭曲角度。 ```csharp SkewTransform transform = new SkewTransform(angleX, angleY); myShape.RenderTransform = transform; ``` 可以将多个变换组合在一起,例如: ```csharp TransformGroup group = new TransformGroup(); group.Children.Add(new TranslateTransform(xOffset, yOffset)); group.Children.Add(new RotateTransform(angle, centerX, centerY)); group.Children.Add(new ScaleTransform(scaleX, scaleY)); myShape.RenderTransform = group; ``` 以上是一些简单的示例,可以根据需要进行变换。注意,RenderTransform属性只能用于UIElement类型的对象,如Shape、Panel等。如果需要对其他类型的对象进行变换,可以使用MatrixTransform类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值