我遇到一个问题,我必须创建一个随机对象(图形)并且必须旋转它。在类里面,我们创建了一个代码,用此代码旋转整个对象
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;
最佳答案
这是绕原点旋转,即坐标为 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”留给读者作为练习。它应该非常简单。
关于java - 绕其点之一旋转对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490639/