旋转方形会导致拉伸

时间:2013-12-11 04:47:38

标签: java rotation geometry

我目前正在研究几何引擎(我希望在其中构建一个物理和游戏引擎)......它有一个问题。当我旋转一个矩形,比如一个正方形时,它首先将它变成一个菱形,然后它几乎看不见,然后回到一个正方形。

for(int i = 0; i < fv.length; i++) {
    double[] ve = fv[i];
    ve[0] = ve[0] - getCMX();
    ve[1] = ve[1] - getCMY();
    double sin = Math.sin(getRot());
    double cos = Math.cos(getRot());
    ve[0] = ((cos * ve[0]) - (sin * ve[1]));
    ve[1] = ((-sin * ve[0]) + (cos * ve[1]));
    ve[0] = ve[0] + getCMX();
    ve[1] = ve[1] + getCMY();
    fv[i] = ve;
}

fv是一个2D双数组。 getCMX / CMY获得广场的中心。

任何想法都表示赞赏,我的目标是让广场在旋转时保持相同的区域??

2 个答案:

答案 0 :(得分:2)

你的两个罪恶因素需要有相反的迹象。并且您必须使用未更改的ve [0]副本来更新ve [1]:

temp  = ((cos * ve[0]) - (sin * ve[1]));
ve[1] = ((sin * ve[0]) + (cos * ve[1]));
ve[0] = temp;

答案 1 :(得分:1)

两个问题:

  1. 您无法将结果计算到与源相同的矢量中。使用两个向量。
  2. 右变换是x'= c * x - s * y; y'= s * x + c * y;