java - 绕其点之一旋转对象

标签 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;

最佳答案

这是绕原点旋转,即坐标为 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/

相关文章:

Java Applet 透明背景

java - java 套接字中收到的延迟响应

java - 执行 Web 应用程序初始配置的一些好的模式是什么?

java - 更改标签的绑定(bind)值?

java - 使用 java 的 SHA 1 校验和输出与给定示例不匹配

java - 在 Java 中获取(十进制) float 的 IEEE 754(单精度)表示

java - DateTimeFormatter 用于解析所有 ISO 有效样式的区域偏移

java - 我需要一个使用 ssl 的 java stomp 客户端库

java - 如何在Java中比较长整型变量和数字

java - if 条件始终返回 true (Java)