有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java尝试使用数学旋转多边形

我有一项学校作业,其中包括旋转多边形。我不能使用任何预先制作的旋转函数,所以我有一个点数组。阵列的设置如下:

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。旋转(polyArray,polyArray[0][0],polyArray[1][0],Math.PI)

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    如果您按以下方式更改条件,它应该可以工作:

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