数学问题:如何正确地在另一个表面上“旋转”表面

时间:2010-10-31 12:32:24

标签: algorithm math

希望它允许在stackexchange站点之间“交叉”... 有谁知道如何解决以下“数学”问题?

https://gamedev.stackexchange.com/questions/5041/correct-blitting-2-surface-problem

提前致谢

2 个答案:

答案 0 :(得分:1)

你的问题似乎是当你想要相对于实际炮塔的中心对它进行blit时,你的左上角是你的炮塔。现在,假设您的炮塔的中心位于x_1y_1,顺时针旋转theta度,应该会在x_2=x_1*cos(theta)处为您提供一个“新”中心,{{1} }。然后,您必须将其与位于y_2=y_1*sin(theta)的炮塔中心对齐。这不应该是一个问题(请记住,我不是很熟悉C#,所以这可能在语法上是不正确的):

13,13

Point posTurret = new Point(13 + this.X - x1*Math.cos(cannonangle), 13 + this.Y - y1*Math.sin(cannonangle)); x1是“y1”中炮塔中心的坐标。

我也crosspost this answer on gamedev

答案 1 :(得分:0)

我不是一个图形人,但我以前做过这样的事情的方式是通过使用面具然后是图像,你需要旋转和blit这两个。也就是说,你有一个黑色的炮塔状“洞”,它可以旋转和布置,以匹配你的炮塔图像所需的旋转。

另一个问题是旋转图像中的像素不会与原始图像中的像素对齐,因此您必须进行一些插值才能使其看起来正确。

我想虽然你可以使用的库可以帮你处理这些东西。