如何使用Java围绕点旋转多边形?
我正在创建画布对象(线、顶点、三角形等)我想对它们应用一个围绕点的旋转
我不能使用Canvas的rotate()方法,因为点附着到地图上的地质点,所以如果我使用rotate()方法,所有地图都是旋转的
问题是画布需要点(int,int),而应用旋转会由于cos和sin函数而产生双精度。因此,当我将旋转应用于所有点时,由于将double转换为int,我会遇到一些图形问题
所以我在寻找最好的解决方案
这是我的轮换代码:
public Point rotatePoint(Point pt, Point center)
{
this.angle = ((this.angle/180)*Math.PI);
double cosAngle = Math.cos(this.angle);
double sinAngle = Math.sin(this.angle);
pt.x = center.x + (int) ((pt.x-center.x)*cosAngle-(pt.y-center.y)*sinAngle);
pt.y = center.y + (int) ((pt.x-center.x)*sinAngle+(pt.y-center.y)*cosAngle);
return pt;
}
# 1 楼答案
我相信你的解决方案很好。一个小的改进是,在将坐标转换为整数之前,将坐标加上0.5,这样你就可以得到我们通常使用的舍入方式——例如,0.5以上的所有值都将被舍入为1。除此之外,我不认为你可以避免做取整,因为你想把一个连续的空间放进一个离散的空间(即平面到画布)
# 2 楼答案
该代码在计算pt时有一个小错误。y、 (第x部分已更新,但稍后使用)。相反,尝试以下方法:
我还使用了以下变体:
# 3 楼答案
试试这个: