Java 使用线集合旋转三角形

Java 使用线集合旋转三角形,java,rotation,Java,Rotation,我有点困在试图旋转一个三角形的数字 所以我试着旋转一个由直线组成的三角形。我有两个类,一行类创建一行。还有一个三角形类,它通过合并所有直线来创建所有三角形。首先,下面是我的Line类,它实现了一个名为Curve的接口。曲线包含绘制、旋转、平移等的定义。请注意,我只是为我的问题添加了相关函数。所以在我的旋转函数中,所讨论的直线(X2,Y2)的端点是旋转的。我不确定这个公式是否正确执行 public class Line implements Curve { double x1Point;

我有点困在试图旋转一个三角形的数字

所以我试着旋转一个由直线组成的三角形。我有两个类,一行类创建一行。还有一个三角形类,它通过合并所有直线来创建所有三角形。首先,下面是我的Line类,它实现了一个名为Curve的接口。曲线包含绘制、旋转、平移等的定义。请注意,我只是为我的问题添加了相关函数。所以在我的旋转函数中,所讨论的直线(X2,Y2)的端点是旋转的。我不确定这个公式是否正确执行

public class Line implements Curve {

    double x1Point;
    double y1Point;
    double x2Point;
    double y2Point;

    public Line(double x1, double y1, double x2, double y2){
        this.x1Point = x1;
        this.y1Point = y1;
        this.x2Point = x2;
        this.y2Point = y2;
    }
    public void rotate(double degrees) {
        x2Point = ((double)(x1Point * Math.cos(degrees * (Math.PI / 180)))) - ((double)(y1Point * Math.sin(degrees  * (Math.PI / 180))));
        y2Point = ((double)(x1Point * Math.cos(degrees * (Math.PI / 180)))) + ((double)(y1Point * Math.sin(degrees  * (Math.PI / 180))));   
    }
然后在我的Triangle类中,它也实现了一个curve类,我将所有的线添加到我的全局arraylist中,并在我的rotate函数中旋转它们。请注意,曲线在屏幕上正确绘制。我没有添加draw方法,因为它与我的问题无关

public class Triangle implements Curve  {

    ArrayList<Curve> list = new ArrayList<Curve>();

    public void add(Line line){
        list.add(line);
    }

     public void rotate(double degrees) {
        for(Curve c: list){
           c.rotate(degrees);
        }
    }
公共类三角形实现曲线{
ArrayList=新建ArrayList();
公共无效添加(行){
列表。添加(行);
}
公共空间旋转(双度){
对于(曲线c:列表){
c、 旋转(度);
}
}
所以我的三角形旋转不正确。我不确定问题出在哪里。可能是在公式中旋转单个直线,但我不确定。希望有人能提供有价值的反馈


谢谢!

我猜您正在尝试围绕其中心旋转三角形(默认旋转是围绕原点应用的
(0,0)
),因此您需要先平移到原点,然后应用旋转,最后平移回原始位置

这是一些代码,所以你明白了。假设你有点(三角形的顶点)
p1
,而
center\u triangle
是三角形的中心

//TRANSLATE TO ORIGIN
double x1 = p1.getX() - center_triangle.x;
double y1 = p1.getY() - center_triangle.y;

//APPLY ROTATION
x1 = x1 * Math.cos(angle) - y1 * Math.sin(angle));
y1 = x1 * Math.sin(angle) + y1 * Math.cos(angle));

//TRANSLATE BACK
p1.setLocation(x1 + center.x, y1 + center.y);
必须对三角形的每个点执行此操作

//TRANSLATE TO ORIGIN
double x1 = p1.getX() - center_triangle.x;
double y1 = p1.getY() - center_triangle.y;

//APPLY ROTATION
x1 = x1 * Math.cos(angle) - y1 * Math.sin(angle));
y1 = x1 * Math.sin(angle) + y1 * Math.cos(angle));

//TRANSLATE BACK
p1.setLocation(x1 + center.x, y1 + center.y);
注意:


使用
Math.toRadians(度)
代替
degrees*(Math.PI/180)

我是否应该将每条直线转换为原点?因此,最好将Line类中的旋转函数更改为转换为原点,旋转,然后再向后转换,但我不知道三角形的中心。请在
triangle
类中执行此操作。