我有一个学校作业,我应该(除其他外)旋转多边形。我不能使用任何预制的旋转功能,所以我有一个点数组。数组设置如下:
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);
将顶点用作枢轴点。然后整个多边形变形。
答案 0 :(得分:2)
虽然问题仍然不是很明确,但我觉得你的问题在于循环。
matrix.length is 2
。所以,代码从不使用这些:
polyArray[0][2]=500;
polyArray[1][2]=500;
如果你改变下面的条件,它应该工作:
for (int i=0;i<matrix[0].length;i++)