1. 假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转RotaryAngle角度后的新的坐标设为(x', y'),有公式:
  2. x'= (x - rx0)*cos(RotaryAngle) + (y - ry0)*sin(RotaryAngle) + rx0 ;
  3. y'=-(x - rx0)*sin(RotaryAngle) + (y - ry0)*cos(RotaryAngle) + ry0 ;
  4. [csharp] view plaincopy
  5. /// <summary>
  6. /// 对一个坐标点按照一个中心进行旋转
  7. /// </summary>
  8. /// <param name="center">中心点</param>
  9. /// <param name="p1">要旋转的点</param>
  10. /// <param name="angle">旋转角度,笛卡尔直角坐标</param>
  11. /// <returns></returns>
  12. private Point PointRotate(Point center, Point p1, double angle)
  13. {
  14. Point tmp = new Point();
  15. double angleHude = angle * Math.PI / ;/*角度变成弧度*/
  16. double x1 = (p1.X - center.X) * Math.Cos(angleHude) + (p1.Y - center.Y ) * Math.Sin(angleHude) + center .X;
  17. double y1 = -(p1.X - center.X) * Math.Sin(angleHude) + (p1.Y - center.Y) * Math.Cos(angleHude) + center.Y;
  18. tmp.X = (int)x1;
  19. tmp.Y = (int)y1;
  20. return tmp;
  21. }

另一种旋转的方法:

  1. private void Form1_Paint(object sender, PaintEventArgs e)
  2. {
  3.  
  4. Graphics graphics = e.Graphics;
  5. var picRect = new RectangleF(, , , );
  6. PointF[] points = new PointF[] { // 将原来四边形的4个顶点坐标放入数组
  7. picRect.Location,
  8. new PointF(picRect.Right, picRect.Top),
  9. new PointF(picRect.Right, picRect.Bottom),
  10. new PointF(picRect.Left, picRect.Bottom)
  11. };
  12. graphics.DrawPolygon(new Pen(Color.Red), points);
  13. Matrix matrix=new Matrix();
  14.  
  15. //更改坐标系
  16. graphics.TranslateTransform(, );
  17. //旋转角度
  18. graphics.RotateTransform();
  19. //恢复坐标系
  20. graphics.TranslateTransform(-, -);
  21.  
  22. //获取旋转后的坐标
  23. graphics.Transform.TransformPoints(points);
  24.  
  25. graphics.DrawPolygon(new Pen(Color.Red), points);
  26.  
  27. }

//获取旋转中心

  1. //var center = new PointF(rectBorder.Width/2, rectBorder.Height/2);
  2.  
  3. ////矩形左上坐标
  4. //float offsetX = 0;
  5. //float offsetY = 0;
  6. //offsetX = center.X - rectBorder.Width/2;
  7. //offsetY = center.Y - rectBorder.Height/2;
  8.  
  9. ////要画的图
  10. //var picRect = new RectangleF(offsetX, offsetY, rectBorder.Width, rectBorder.Height);
  11. //var Pcenter = new PointF(picRect.X + picRect.Width/2, picRect.Y + picRect.Height/2);
  12.  
  13. ////让图片绕中心旋转一周
  14. ////for (int i = 0; i < 361; i += 10)
  15. ////{
  16. //var changeRect = new Rectangle((int) picRect.X, (int) picRect.Y, (int) picRect.Width,
  17. // (int) picRect.Height);
  18.  
  19. ////绘图平面以图片的中心点旋转
  20. //graphics.TranslateTransform(Pcenter.X, Pcenter.Y);
  21. //graphics.RotateTransform(_ShapeExAngle);
  22. ////恢复绘图平面在水平和垂直方向的平移
  23. //graphics.TranslateTransform(-Pcenter.X, -Pcenter.Y);
  24.  
  25. ////绘制图片并延时
  26. //graphics.DrawRectangle(borderPen, changeRect);
  27. ////重置绘图平面的所有变换
  28. //graphics.ResetTransform();

一个坐标点围绕任意中心点旋转--C#实现的更多相关文章

  1. html5 canvas围绕中心点旋转

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. JAVA对图片的任意角度旋转,以及镜像操作

    package relevantTest;/* * 该代码实现了对图像的水平镜像变换,垂直镜像变换,任意角度旋转,jtf的实时监控,以及对图像的缩放变换,以及按钮的若隐若现效果. * 在对图像进行任意 ...

  3. 在图片不被裁剪时opencv绕图片中任意点旋转任意角度

    opencv绕图片中任意角度旋转任意角度   最近在做项目需要把把图片绕图片中任意点旋转任意角度,考虑到自己旋转需要编写插值算法,所以想到了用opencv,但是网上都是围绕图片中点旋转任意角度的,都是 ...

  4. Winform以任意角度旋转PictureBox中的图片的方法

    方法1: private void RotateFormCenter(PictureBox pb, float angle) { Image img = pb.Image; int newWidth ...

  5. Linux使用一个定时器实现设置任意数量定时器功能【转】

    转自:https://www.jb51.net/article/120748.htm 为什么需要这个功能,因为大多数计算机软件时钟系统通常只能有一个时钟触发一次中断.当运行多个任务时,我们会想要多个定 ...

  6. js数据类型的检测总结,附面试题--封装一个函数,输入任意,输出他的类型

    一.javascript 中有几种类型的值 1.基本数据类型 : 包括 Undefined.Null.Boolean.Number.String.Symbol (ES6 新增,表示独一无二的值) 特点 ...

  7. 剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。

    1 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用 ...

  8. Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会

    在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj ...

  9. three.js 对象绕任意轴旋转--模拟门转动

    说了几篇的数学方法,这篇放松一下,郭先生说说绕任意轴转动.说一说其中一种方法,也是比较容易理解的一种,它的原理就是将子对象放到一个盒子中,然后改变子对象相对于父对象的位置(因为子对象的原点默认还是在盒 ...

随机推荐

  1. bzoj 1097 [POI2007]旅游景点atr(最短路,状压DP)

    [题意] 给定一个n点m边的无向图,要求1开始n结束而且顺序经过k个点,给出经过关系x,y代表y必须在x之后经过,求最短路. [思路] 先对k个点进行spfa求出最短路. 设f[s][i]代表经过点集 ...

  2. HDU5634 Rikka with Phi 线段树

    // HDU5634 Rikka with Phi 线段树 // 思路:操作1的时候,判断一下当前区间是不是每个数都相等,在每个数相等的区间上操作.相当于lazy,不必更新到底. #include & ...

  3. <Stackoverflow> 声望和节制

    什么是声望(reputation)?我是怎样获得(或失去)它的? 声望是一种粗略的测量,用来表示社区对你的信任度.通过让别人相信你知道自己正在讨论什么来获得.对网站的基本使用,包括问一个问题,回答,建 ...

  4. 虚拟化技术对比:Xen vs KVM

    恒天云:http://www.hengtianyun.com/download-show-id-68.html 一.说明 本文主要从功能方面和性能方面对Xen和KVM对比分析,分析出其优缺点指导我们恒 ...

  5. 在EC2上安装MEAN环境

    本文在个人博客上的地址为URL,欢迎品尝. 搭建决策树项目外网DEMO尝试几个地方后,最后选择了EC2(Amazon Elastic Compute Cloud).选择的是最经济便宜的Amazon L ...

  6. Django settings — Django 1.6 documentation

    Django settings - Django 1.6 documentation export DJANGO_SETTINGS_MODULE=mysite.settings django-admi ...

  7. 第二百六十一、二天 how can I坚持

    昨天在家宅了一天,晚上去看了个电影<寻龙诀>,感觉一般,虽然有黄渤.舒淇.十分打7分吧,画面倒是很震撼. 今天,去了趟东升八家郊野公园,想买个篮球玩玩来,可是超市里的太坑了,都是赠品还拿出 ...

  8. UVA 796 - Critical Links (求桥)

    Critical Links  In a computer network a link L, which interconnects two servers, is considered criti ...

  9. JSF 2 radio buttons example

    In JSF, "h:selectOneRadio" tag is used to render a set of HTML input element of type " ...

  10. My97DatePicker源码的K方法

    <head></head> <script> var X = window,M = "document", C = "getEleme ...