首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矢量图形的旋转

矢量图形的旋转
EN

Stack Overflow用户
提问于 2012-01-31 21:58:11
回答 1查看 1.3K关注 0票数 0

我有一个在WinForms中绘制和编辑矢量图形的应用程序

我有图像,矩形,椭圆,区域等,我知道如何通过鼠标移动调整它们的大小。但我不知道如何通过鼠标移动来旋转它们。

我将对象绘制到图形中。

我试过了,但不起作用。

代码语言:javascript
复制
g.TranslateTransform((float)(this.Rectangle.X + this.Rectangle.Width / 2), (float)(this.Rectangle.Y + this.Rectangle.Height / 2));
g.RotateTransform(this.Rotation);
g.TranslateTransform(-(float)(this.Rectangle.X + this.Rectangle.Width / 2), -(float)(this.Rectangle.Y + this.Rectangle.Height / 2));
//g.TranslateTransform(-(float)(rect.X + rect.Width / 2), -(float)(rect.Y + rect.Height / 2));

g.DrawImage(img, rect);

g.ResetTransform();

这不起作用,因为我不知道如何在新的(旋转的)位置找到对象的角落,所以我无法调整它的大小…

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-01 00:31:08

你需要应用高中的三角学。如果你在谷歌上搜索"graphics.drawimage rotation“,有很多文章。

但首先,您不应该转换Graphics对象本身。您只是希望获得图像的新边界框。为此,请执行以下操作:

  1. 采用以原点为中心的图像的边界框。请记住,这是为了DrawImage(图像,Point[])的好处而定义为三点

Point[] boundingBox ={ new Point(-width/2,- height/2),new Point(width/2,-height/2),new Point(-width /2,height/2)};

  • 使用trig旋转。通过以下函数馈送每个点:

Point rotatePointAroundOrigin(Point point,float angleInDegrees) { float angle = angleInDegrees * Math.PI/180;//以弧度表示的获取角度返回新Point( point.X *Math.Cos(角度)- point.Y *Math.Sin(角度),point.X *Math.Sin(角度)+ point.Y *Math.Cos(角度));}

  • 将边界框平移到它必须到达的位置。将宽度/2和高度/2加到它的每个点上,再加上你想要的任何额外的量。

  • 调用DrawImage(image, boundingBox)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9080742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档