这是一个更加数学相关的问题。
在我的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
}
他们的任何类型转换是否可能导致此问题,或者我的数学错误?
更新
我在运行时查看了Math.cos(angle)
和Math.sin(angle)
。他们在0和1之间跳转,即使angle
只是稍微改变了一点。
现在我想知道:方法是否将RAD或DEG视为参数? (显然我需要deg)
答案 0 :(得分:2)
如果您想要从[cx, cy]
和dx
开始轮换一行,请使用该代码段:
canvas.save();
canvas.rotate(angle, cx, cy);
canvas.drawLine(cx, cy, cx + dx, cy, paint);
canvas.restore();