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. diff/merge configuration in Team Foundation - common Command and Argument values - MSDN Blogs

    One of the extensibility points we have in Team Foundation V1 is that you can configure any other di ...

  2. maven archetype生成自定义项目原型(模板)

    maven archetype可以将一个项目做成项目原型,之后只需要以此原型来创建项目,那么初始创建的项目便具有原型项目中的一切配置和代码.通俗讲就是一个项目模板. eclipse中那些快速生成mav ...

  3. 【转帖】分享一个迅为4412开发板OTG烧录批处理文件

    平台:iTOP-4412开发板 Bat 功能: 1.可以分条的执行烧录,不需要每次烧录都去复制命令 2.可以批量烧录 开发板系统烧录批处理文件,请将此文件放置在fastboot程序同目录下,下载地址: ...

  4. [转]说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    本文转自:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两 ...

  5. 【原】移动web页面兼容处理的思考

    本月收到一份关爱里程碑的邮件,入职满3周年了,从一个懵懂的新人到从容淡定的小油条,在外辛苦打工不容易,能收到一封简单的关怀邮件也是有感欣慰,这里祝愿公司越发展越好. 进入主题,移动网页设计中,很多同学 ...

  6. 【2016-11-7】【坚持学习】【Day22】【Oracle 分页查询】

    方法1: select * from (select rownum rn, temp.* from ( +sqlText+ ) temp ) where rn > "+ start + ...

  7. Appium学习实践(五)遇到的坑(记录自己工作中遇到的坑以及解决方案,不定时更新)

    1.错误截图,有时候测试用例执行错误的话,相对于复杂的log,一张错误截图也许能更明确哪里出的问题(当然有时,截图+log还是最好了) 坑:本来是想测试用例fail的时候捕获异常来执行截图操作,但是由 ...

  8. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  9. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  10. webService获取电话号归属地和获取天气情况步骤,及创建属于自己的webservice

    一.什么是Web服务 Web服务是一种可以用来解决跨网络应用集成问题的开发模式,目的是保证不同平台的应用服务可以互操作 二.Web服务的三个核心 Soap: SOAP(Simple Object Ac ...