我试图做一个旋转方法。首先我点击一个形状的任何顶点然后每次鼠标移动时,形状应该根据该顶点和新点之间的角度旋转。
它应该在自己的中心旋转(质心)但它最终会使形状变形,并使其变得越来越小。我不知道为什么这不起作用,目标是鼠标现在的点,索引是点击以启动旋转的顶点的索引。
矢量点包含所有形状的顶点。
以下是video发生的事情。
编辑1:现在getAngle函数返回一个弧度值。
新视频:https://www.youtube.com/watch?v=y0Ch6gE5Ebs
public void rotate(Point target, int index) {
double centerx = getCentroid().getX();
double centery = getCentroid().getY();
float angle = getAngle(target, points.get(index));
Vector<Point> pointsAux = new Vector<Point>(points.size());
for(int i = 0; i<points.size(); i++){
Point p = points.get(i);
double newx = centerx + (p.getX()-centerx)*Math.cos(angle) - (p.getY()-centery)*Math.sin(angle);
double newy = centery + (p.getX()-centerx)*Math.sin(angle) - (p.getY()-centery)*Math.cos(angle);
p = new Point((int)newx, (int)newy);
pointsAux.add(p);
}
points.clear();
points.addAll(pointsAux);
}
public float getAngle(Point target, Point clicked) {
return (float) Math.atan2(target.getX()- clicked.getX(), target.getY() - clicked.getY());
}
public Point getCentroid(){
int sumx = 0;
int sumy = 0;
for(int i = 0; i<points.size();i++){
sumx+=points.get(i).getX();
sumy+=points.get(i).getY();
}
Point centroid = new Point(sumx/points.size(), sumy/points.size());
return centroid;
}
对于任何形式的帮助,我都会感激不尽。