首页 > 解决方案 > 围绕其中一个点旋转对象

问题描述

我有一个问题,我必须创建一个随机对象(图)并且我必须旋转它。在课堂上,我们创建了一个代码,我们使用此代码旋转整个对象

 int count = Integer.parseInt(jComboBox1.getSelectedItem().toString());
    double alfa = Math.toRadians(Float.parseFloat(jTextField1.getText()));
     for (int i=0;i<count;i++){
         int x=(int)Math.round(P.x[i]*Math.cos(alfa)-P.y[i]*Math.sin(alfa));
         int y=(int)Math.round(P.x[i]*Math.sin(alfa)+P.y[i]*Math.cos(alfa));
         P.x[i]=x;
         P.y[i]=y;

     }

但是我必须修改这段代码,使其围绕该对象的特定点旋转,如果之前该点位于对象之外的某个位置,那么这一次,它必须是对象的一个​​点。对象的图片我必须围绕蓝点旋转所有红点。我的表单中有一个单选按钮,我可以在其中选择对象的特定点,然后通过鼠标单击我可以更改该点的坐标,但我不知道如何在不使用鼠标的情况下获取 X 和 Y 坐标使用这个公式:

x1=x-中心X;

y1=y-中心Y;

x2=x1*Math.cos(alpha)+y1*Math.sin(alpha);

y2=x1*Math.sin(alpha)-y1.Math.cos(alpha);

x3=x2+中心X;

y3=y2+中心Y;

标签: java

解决方案


这是围绕原点旋转,即坐标为x = 0,y = 0的点。

     int x=(int)Math.round(P.x[i]*Math.cos(alfa)-P.y[i]*Math.sin(alfa));

您现在需要围绕其他点旋转它,我们称它为 XX、YY

     int x=(int)Math.round((P.x[i]-XX)*Math.cos(alfa)-(P.y[i]-YY)*Math.sin(alfa));

当你有 x 和 y 时,你需要添加原始点:

     P.x[i]=XX+x;

我在这里只做了“x”方面的事情,把“y”留给读者作为练习。它应该很简单。


推荐阅读