按指定角度旋转线(Java / Android)

时间:2015-08-20 11:50:25

标签: java android math

这是一个更加数学相关的问题。 在我的Android应用程序中,我有一个画布,从开始到终点绘制一条线。
我也有angle属性来旋转线。

我试图将代码应用到我的cocept,但它奇怪地跳了起来,没有指向它应该的方向。 (0deg =水平线)

//Coordinates for P1 and P2
int startx = 0;
int starty = 66;
int endx = 420;
int endy = 66;

//Alpha
float angle = 0.000F;
final float radius = 209.500F;
final float extra_radius = 20.000F; //required later - don't mind it

private void reCal(float[] vals) {
    float xAcc = vals[0]*(-1);
    float yAcc = vals[1]*(-1);

    angle = yAcc / 10.000F * 90.000F;
    final float rRadius = radius + extra_radius;
    startx = (int) (radius - Math.cos(angle) * rRadius); //left
    endx = (int) (radius + Math.cos(angle) * rRadius); //right
    starty = 66 + (int) (Math.sin(angle) * rRadius); //top
    endy = 66 - (int) (Math.sin(angle) * rRadius); //bot
}

他们的任何类型转换是否可能导致此问题,或者我的数学错误?

enter image description here

更新

我在运行时查看了Math.cos(angle)Math.sin(angle)。他们在0和1之间跳转,即使angle只是稍微改变了一点。

现在我想知道:方法是否将RAD或DEG视为参数? (显然我需要deg)

1 个答案:

答案 0 :(得分:2)

如果您想要从[cx, cy]dx开始轮换一行,请使用该代码段:

canvas.save();
canvas.rotate(angle, cx, cy);
canvas.drawLine(cx, cy, cx + dx, cy, paint);
canvas.restore();