【发布时间】:2016-02-22 01:48:15
【问题描述】:
我一直在这个网页上搜索我可以旋转多边形的方式,但我可能会丢失一些东西或者只是没有得到它。
我的画是一颗星星,但它只是一堆三角形,所以如果我能正确旋转其中一个,我就能让其他的也正确旋转。 所以,这是一个三角形的代码
Point[] pico1 = new Point[3];
pico1[0] = new Point(220, 240); //Origin
pico1[1] = new Point(220, 40);
pico1[2] = new Point(160, 140);
g.FillPolygon(Rojo2, pico2);
g 是一个全局 Graphics 变量,它等于 PictureBox 上绘制事件的 e.Graphics。
然后我有一个计时器,我希望多边形旋转的每个刻度。我每个刻度都尝试了 90°,但我的三角形只是变形了。 所以我真的不知道如何获得新的坐标。老师说我可以这样做:
Point[] pico1 = new Point[3];
pico1[0] = new Point(220, 240); //Origin
pico1[1] = new Point(220+px, 40+py);
pico1[2] = new Point(160+px, 140+py);
g.FillPolygon(Rojo1, pico1);
px 和 py 是全局变量,初始值为 0。我想这两个可以帮助我获得新的点,但我真的迷路了。
有没有更简单的方法可以围绕 (220, 240) 旋转该三角形?或者我怎么能用 px 和 py 做到这一点?我真的不知道该怎么办。我在这里找到了一些使用 sin 和 cos 的帖子,但是当我尝试在我的代码中使用它时,多边形仍然会变形。
【问题讨论】:
-
使用
Sin和Cos应该是您处理此类转换的方式。这毕竟是一个几何问题。如果有任何变形,很可能是您使用的几何公式错误造成的。您可以展示您如何使用Sin和Cos以及它如何冤枉您(展示变形)。 -
您有两个选择:1) 使用 Math.Sin 等进行计算。 2) 将 Graphics 对象旋转一个角度。第一个是纯数学,不难,但使用一些三角公式或可能建立一个矩阵。后者就像执行 Graphics.RotateTransform 一样简单(在执行 TranslateTransform 以将原点移动到旋转中心之后)。这真的取决于你应该达到什么目标..
标签: c# timer rotation polygon points