使用线的集合旋转三角形

时间:2014-02-22 19:50:11

标签: java rotation

我有点想要旋转一个三角形图。

所以我试图旋转一个由Lines组成的整个三角形。我有两个类,一个Line类创建一个Line。还有一个Triangle类,通过组合所有行来创建所有三角形。首先,下面是我的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类中也实现了一个曲线类,我将所有的行添加到我的全局arraylist中并在我的旋转函数中旋转所有这些行。请注意,曲线在屏幕上正确绘制。我没有添加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);
        }
    }

所以我的Triangle旋转不合适。我不确定问题出在哪里。旋转单个线可能在公式中,但我不确定。希望有人能提供有价值的反馈!

谢谢!

1 个答案:

答案 0 :(得分:0)

我猜你试图围绕它的中心旋转三角形(默认旋转应用于原点(0, 0) ),所以你需要首先转换为原点,然后应用旋转,最后转回原来的位置。

这是一些代码,所以你明白了。假设你有点(三角形的顶点)p1center_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);

您必须为三角形的每个点执行此操作。

注意:

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