【问题标题】:Trying to rotate a polygon using math尝试使用数学旋转多边形
【发布时间】:2013-09-24 22:31:27
【问题描述】:

我有一个学校作业,我应该(除其他外)旋转一个多边形。我不能使用任何预制的旋转功能,所以我有一个点数组。数组是这样设置的:

intArray[2][amount_of_points] 其中intArray[0] 等于点x 坐标,intArray[1] 保存y 坐标。

    //x=pivot point x coordinate, y = pivot point y coordinate.
public int[][] rotate(int[][]matrix,int x, int y, double degrees){

    double s=Math.sin(degrees);
    double c=Math.cos(degrees);


    for (int i=0;i<matrix.length;i++){

        //translate to origin
        int px=matrix[0][i]-x;
        int py=matrix[1][i]-y;

        //rotate
        double xnew = (px*c)-(py*s);
        double ynew = (px*s)+(py*c);

        //translate back
        px=(int)((xnew+x)+0.5);
        py=(int)((ynew+y)+0.5);

        matrix[0][i]=px;
        matrix[1][i]=py;
    }

到目前为止,这是我的代码,它绝对不适合我。我试图尽可能多地修剪代码。任何帮助都意义重大!

编辑:我在运行代码时没有收到任何错误,没有异常等。唯一的问题是多边形没有按照我想要的方式旋转。

我已经制作了一个测试多边形:

polyArray = new int [2][3];
    polyArray[0][0]=400;
    polyArray[1][0]=200;
    polyArray[0][1]=300;
    polyArray[1][1]=500;
    polyArray[0][2]=500;
    polyArray[1][2]=500;

我在 JPanel 中绘制,然后通过旋转方法运行这个数组,如下所示: polyArray=mm.rotate(polyArray, polyArray[0][0], polyArray[1][0], Math.PI);

使用顶点作为枢轴点。然后整个多边形变形。

【问题讨论】:

  • 抱歉第一个评论有误,这是一张未旋转的多边形图片:img32.imageshack.us/img32/103/4ulx.png 然后由 PI 旋转:i.imgur.com/q9t0yXU.png 枢轴点是顶点
  • 我对图片不感兴趣。运行这个有没有异常?
  • 你将不得不解释你所说的“绝对不适合我”的意思,否则你的问题可能会被搁置。
  • 好的,我在原来的问题中添加了解释,谢谢。

标签: java eclipse rotation polygon


【解决方案1】:

虽然问题还不是很清楚,但我觉得你的问题出在循环上。 matrix.length is 2。所以,代码从不使用这些:

polyArray[0][2]=500;
polyArray[1][2]=500;

如果你改变如下条件,它应该可以工作:

for (int i=0;i<matrix[0].length;i++)

【讨论】:

  • G V,你说得对,这就是问题所在。对不起,我的问题不是很清楚,我现在很累。非常感谢!
  • 欢迎您...对于未来,您对问题的了解越清楚,您得到答案的速度就越快:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 2021-12-18
  • 2013-03-21
  • 1970-01-01
相关资源
最近更新 更多