我知道这里有关于点和旋转的一些问题,我觉得我几乎就在那里。我需要一点推动。
我有一个像这样的6分的形状。
我想围绕Point C
旋转Point P我需要手动执行此操作,因此我对使用AffineTransform
不感兴趣提前致谢
Thread thread = new Thread() {
public void run() {
//THE RADIUS OF THE SHAPE IS 100
//GET THE POINT P
PointClass point_class = points.get(0);
//GET THE CENTER POINT C
Point center = new Point(point_class.point.x - 100, point_class.point.y);
int deg = 0;
while(deg < 360) {
//GET THE ANGLE IN RADIANS
double angle = Math.toRadians(deg);
//FIRST TRANSLATE THE DIFFERENCE
int x1 = point_class.point.x - center.x;
int y1 = point_class.point.y - center.y;
//APPLY ROTATION
x1 = (int) ((double) x1 * Math.cos(angle) - y1 * Math.sin(angle));
y1 = (int) ((double) x1 * Math.sin(angle) + y1 * Math.cos(angle));
//TRANSLATE BACK
point_class.point.x = x1 + center.x;
point_class.point.y = y1 + center.y;
//ROTATE + 1 DEEGRE NEXT TIME
deg++;
try {
//SLEEP TO SEE THE DIFFERENCE
sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
thread.start();
这段代码会发生的事情是Point P像这样
在中心结束
答案 0 :(得分:3)
我认为你的半径每次都会在while循环中缩小,因为会将双精度转换为整数。这个可能更好地工作:
double x1 = point_class.point.x - center.x;
double y1 = point_class.point.y - center.y;
//APPLY ROTATION
x1 = x1 * Math.cos(angle) - y1 * Math.sin(angle));
y1 = x1 * Math.sin(angle) + y1 * Math.cos(angle));
//TRANSLATE BACK
point_class.point.x = (int)Math.ceil(x1) + center.x;
point_class.point.y = (int)Math.ceil(y1) + center.y;
答案 1 :(得分:2)
所以我弄清楚出了什么问题。
两点的翻译,
//FIRST TRANSLATE THE DIFFERENCE
double x1 = point_class.point.x - center.x;
double y1 = point_class.point.y - center.y;
必须走出循环,因为在应用旋转矩阵时我需要在该位置取基。而且在循环中,我应该将deegre固定为1,这样它只会增加1而不是81 + 82 + 83 ......不知道我为什么这样做。
希望这有助于某人=)