2D矩阵的旋转:

NewX = X * Cos(α) - Y * Sin(α)

NewY = X * Sin(α) + Y * Cos(α)

一般在三角函数中使用的是弧度,我们可以通过下面的公式将角度转为弧度:

α = (degrees / 360 * PI)

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing; namespace MatrixTransForm
{
/// <summary>
/// 三角形
/// </summary>
class Triangle
{
PointF A, B, C; public Triangle(PointF A, PointF B, PointF C)
{
this.A = A;
this.B = B;
this.C = C;
} /// <summary>
/// 绘制三角形
/// </summary>
/// <param name="g"></param>
public void Draw(Graphics g)
{
Pen pen = new Pen(Color.Red);
pen.Width = ;
g.DrawLine(pen, A, B);
g.DrawLine(pen, B, C);
g.DrawLine(pen, C, A);
} /// <summary>
/// 旋转三角形
/// </summary>
/// <param name="degrees">要旋转的角度</param>
public void Rotate(int degrees)
{
// 将角度转为弧度
float angle = (float)(degrees / 360.0f * Math.PI); float newX = (float)(A.X * Math.Cos(angle) - A.Y * Math.Sin(angle));
float newY = (float)(A.X * Math.Sin(angle) + A.Y * Math.Cos(angle)); A.X = newX;
A.Y = newY; newX = (float)(B.X * Math.Cos(angle) - B.Y * Math.Sin(angle));
newY = (float)(B.X * Math.Sin(angle) + B.Y * Math.Cos(angle)); B.X = newX;
B.Y = newY; newX = (float)(C.X * Math.Cos(angle) - C.Y * Math.Sin(angle));
newY = (float)(C.X * Math.Sin(angle) + C.Y * Math.Cos(angle)); C.X = newX;
C.Y = newY; }
}
}

窗口代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace MatrixTransForm
{
public partial class Form1 : Form
{
Triangle t; public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
if (t == null)
t = new Triangle(new PointF(, -), new PointF(, ), new PointF(-, ));
Invalidate();
} private void Form1_Paint(object sender, PaintEventArgs e)
{
if (t != null)
{
e.Graphics.TranslateTransform(, );
t.Draw(e.Graphics);
}
} private void timer1_Tick(object sender, EventArgs e)
{
if (t != null)
{
t.Rotate();
Invalidate();
}
}
}
}

效果:

[Unity] 3D数学基础 - 2D旋转矩阵的更多相关文章

  1. Unity 3D制作2D游戏的几种方法

    1.使用本身UGUI. 2.把摄像机的投影改为正交投影,不考虑Z轴. 3.使用Untiy自身的2D模式. 4.使用2D TooKit插件.

  2. 强大的游戏开发工具Unity3D推出2D开发工具,unity将混合3D与2D开发

    2013 Unity全球开发者大会(Unite 2013)于2013年8月28日在温哥华隆重开幕,会上Unity全球CEO David Helgason在Keynote上宣布Unity 4.3版本即将 ...

  3. 介绍用C#和VS2015开发基于Unity架构的2D、3D游戏的技术

    [Unity]13.3 Realtime GI示例 摘要: 分类:Unity.C#.VS2015 创建日期:2016-04-19 一.简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图 ...

  4. 3D数学基础 KeyNote 1

    [计算几何复习要点] 1.向量加法的几何含意: a+b的释意为:a的尾连上b的头,新建一条从a的尾指向b的头的向量. 2.向量减法的几何含意: a-b的释意为:尾部相连,新建一个从b的头指向a的头的向 ...

  5. 3D数学基础:四元数与欧拉角之间的转换

    在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点.本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 单位四元数可视化为三维矢量加上第四 ...

  6. Unity 3D 游戏上线之后的流水总结

    原地址:http://tieba.baidu.com/p/2817057297?pn=1 首先.unity 灯光烘焙 :Unity 3D FBX模型导入.选项Model 不导入资源球.Rig 不导入骨 ...

  7. Unity 3D使用GameObject创建一个简单的可移动物体

    于Unity 3D游戏的开发.游戏脚本需要3D模拟组合,该脚本将被写入阻力3D为了达到效果对象. 以下是一个小实例,使用Unity 3D实现一个可控制移动的小人.小人能够向前.向后.向左和向右移动. ...

  8. Unity 4.3 2D 教程:新手上路

    这篇文章译自 Christopher LaPollo 先生的 Unity 4.3 2D 教程的第一部分 Unity 4.3 2D Tutorial: Getting Started 感谢这套优秀教程的 ...

  9. Unity 3D 之贪吃蛇 Text 心得 & Audio

    当我们需要在游戏街面上增加文本时, 我们就需要用到Text 组件 注意: 当文本的长度或者宽度不够时,字体将无法显示. 因为是面对组件编程,所以每一个组件的component都可以同过GetCompo ...

随机推荐

  1. Centos网络配置

    网上搜索:centos网络配置的方法,主要包括dns.网关.IP地址,主要是配置resolv.conf\network\ifcfg-eth0这些网络配置文件. 稍后我会就centos7的网络配置进行实 ...

  2. 【C++】输入多行数字到数组

    前天做某公司笔试题的时候,其输入格式是多行数字,每行以空格为分隔符,以换行符号为结束输入到多个数组.在JAVA中有相应的函数直接将一行拆成数组,感觉在C++中这中输入方式还是挺奇怪的,今天想出一种解决 ...

  3. 开源一个windows下的定时任务框架,简单粗暴好用。

    这里是你想要的功能: 支持插件,将你要执行的任务编译成程序集放到框架的根目录下,再进行简单的配置就行了. 支持Corn表达式.想让任务在什么时候执行就在什么时候执行. 支持安装成windows ser ...

  4. [Django]网页中利用ajax实现批量导入数据功能

    url.py代码: url(r'^workimport/$', 'keywork.views.import_keywork', name='import_keywork') view.py代码: fr ...

  5. 架构实例之Demo_JSP

    架构实例之Demo_JSP 1.开发工具和开发环境       开发工具: MyEclipse10,JDK1.6.0_13(32位),Tomcat7.0(32位),mysql5.7.13 开发环境:W ...

  6. Win10 通过升级安装完成后出现了中文字体忽大忽小的问题解决。

      解决方法:   下载Win10的中文语言包.

  7. 《InsideUE4》-9-GamePlay架构(八)Player

    你们对力量一无所知 引言 回顾上文,我们谈完了World和Level级别的逻辑操纵控制,如同分离组合的AController一样,UE在World的层次上也采用了一个分离的AGameMode来抽离了游 ...

  8. 【原】iphone6来了,我该做点什么(兼容iphone6的方法)

    北京时间2014年9月10日凌晨1点,苹果公司正式发布其新一代产品 iPhone6,相信做webapp开发的同学对它是充满了好奇和等待,也担心它带来各种坑爹,高清的分辨率,升级的retina显示屏,我 ...

  9. js/jquery/html前端开发常用到代码片段

    1.IE条件注释 条件注释简介 IE中的条件注释(Conditional comments)对IE的版本和IE非IE有优秀的区分能力,是WEB设计中常用的hack方法.条件注释只能用于IE5以上,IE ...

  10. Socket

    Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 以J2SDK-1.3为例,Socket和ServerSocket类库位于 ...