围绕对象的某一点旋转对象

时间:2018-11-26 23:29:07

标签: java

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

 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;

     }

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

  

x1 = x-centerX;

     

y1 = y-centerY;

     

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

     

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

     

x3 = x2 + centerX;

     

y3 = y2 + centerY;

1 个答案:

答案 0 :(得分:0)

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

from applib.Foo import Foo

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

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

当您拥有x和y时,则需要添加原始点:

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

我在这里只做过x方面的工作,而把y做为读者的练习。它应该非常简单。