我有点想要旋转一个三角形图。
所以我试图旋转一个由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旋转不合适。我不确定问题出在哪里。旋转单个线可能在公式中,但我不确定。希望有人能提供有价值的反馈!
谢谢!
答案 0 :(得分:0)
我猜你试图围绕它的中心旋转三角形(默认旋转应用于原点(0, 0)
),所以你需要首先转换为原点,然后应用旋转,最后转回原来的位置。
这是一些代码,所以你明白了。假设你有点(三角形的顶点)p1
而center_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)
。