java 线绕点旋转_围绕另一个点Java旋转一个点

这是java中的一个代码段,用于将坐标A(10,10),B(20,10),C(20,20),D(10,20)的正方形围绕中心旋转一个角度广场的点 . 广场的一侧是10分 . 旋转角度为90度 . 理想情况下,旋转A必须变为B,B必须变为C,C必须变为D,D变为A.

private Point getRotation(Point start, int side, int rotation){

int x = start.getX();

int y = start.getY();

int pivot_x = x + (side/2);

int pivot_y = y + (side/2);

float angle = (float)Math.toRadians(rotation);

int xR = (int)(pivot_x + (x -pivot_x)*Math.cos(angle) - (y - pivot_y)*Math.sin(angle));

int yR = (int)(pivot_y + (x -pivot_x)*Math.sin(angle) + (y - pivot_y)*Math.cos(angle));

return new Point(xR,yR);

}

public static void main(String[] args) {

Square s = new Square();

Point rotatedPoint1= s.getRotation(new Point(10,10), 10, 90);

System.out.println("{"+rotatedPoint1.getX()+","+rotatedPoint1.getY()+"}");

Point rotatedPoint2= s.getRotation(new Point(20,10), 10, 90);

System.out.println("{"+rotatedPoint2.getX()+","+rotatedPoint2.getY()+"}");

Point rotatedPoint3= s.getRotation(new Point(20,20), 10, 90);

System.out.println("{"+rotatedPoint3.getX()+","+rotatedPoint3.getY()+"}");

Point rotatedPoint4= s.getRotation(new Point(10,20), 10, 90);

System.out.println("{"+rotatedPoint4.getX()+","+rotatedPoint4.getY()+"}");

}

实现的结果不正确

点A(10,10)旋转到(20,10)----正确

点B(20,10)旋转到(30,10)---- INCORRECT

点C(20,20)旋转到(30,20)---- INCORRECT

点D(10,20)旋转到(20,20)---- INCORRECT

应用的公式是

如果(h,k)是点(x,y)需要以角度THETA旋转的点,那么旋转后的坐标(xR,yR)是

xR = h(x-h)cos(THETA) - (y-k)sin(THETA)

yR = k(x-h)sin(THETA)(y-k)cos(THETA)

问题出在哪儿?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值