public ArrayList slode(List<store> lists) //找斜率
{
ArrayList array = new ArrayList();
float k;
for (int i = 4; i < lists.Count; i += 4)
{
k = (float)(lists[i].y - lists[i - 4].y) / (float)(lists[i].x - lists[i - 4].x);此处k有可能是无穷大,但是无穷大的结果都丢失了
array.Add(k);
}
return array;
}
public ArrayList findNum(ArrayList array , double s, boolean t)//根据斜率判断笔画序列
{
Log.i("array represent slode of bihua in finNum",String.valueOf(array.toString()));
Log.i("s represent the lengthof bihua in finNum",String.valueOf(s));
Log.i("t represent direction of bihua in finNum",String.valueOf(t));
ArrayList bihuaNum=new ArrayList();
int x=1;
for(int i=0;i<array.size();i++)
{
Float a=(Float)array.get(i);
if(s<60)
{
x=9;
}
else
{
double b=Math.atan((double)a)*180/Math.PI;//斜率转换成角度 a有可能为无穷大但结果中 Log.i("a:"+String.valueOf(a),"b:"+String.valueOf(b));
if (b >= 0 && b < 20 || b > 160 && b <= 180)
{
x = 1; //横
}
else if (b > 70 && b < 110)
{
x = 2; //竖
}
else if (b >= 20 && b <= 70)
{
if (!t) //方向向右下
{
x = 4; //捺
}
else //方向向左上
x = 5; //钩
}
else if (b > -70 && b < -20)
{
if (t) //方向向左下
{ Log.i("pie of bihua in finNum",String.valueOf(b));
x = 3; //撇
}
else //方向向右上
x = 6; //提
}
bihuaNum.add(new Integer(x));
}
}Log.i("list1 in findNum",String.valueOf(bihuaNum.toString()));
return bihuaNum;
}
logcat中的部分信息
05-03 09:03:17.515: I/k:y,x: 33(832): 1.0
05-03 09:03:17.515: I/k:y,x: 97(832): 3.0
05-03 09:03:17.515: I/k:y,x: 102(832): -1.0
05-03 09:03:17.515: I/k:y,x: 86(832): 1.0
05-03 09:03:17.545: I/loc in Feature(832): [Point(216, 133), Point(216, 135), Point(216, 146), Point(217, 155), Point(217, 166), Point(218, 183), Point(220, 219), Point(220, 240), Point(220, 263), Point(219, 295), Point(218, 331), Point(219, 358), Point(219, 365), Point(219, 387), Point(219, 419), Point(219, 439), Point(220, 451), Point(220, 452)]
05-03 09:03:17.555: I/alist in Feature and return alist(832): [33.0, 32.333332, -102.0, 86.0]
05-03 09:03:17.555: I/the size of lists in direction(832): 18
05-03 09:03:17.555: I/System.out(832): 216*220
05-03 09:03:17.555: I/c in direction(832): -4
05-03 09:03:17.555: I/in direction(832): false
05-03 09:03:17.555: I/array represent slode of bihua in finNum(832): [33.0, 32.333332, -102.0, 86.0]
05-03 09:03:17.555: I/s represent the lengthof bihua in finNum(832): 319.02507738420815
05-03 09:03:17.555: I/t represent direction of bihua in finNum(832): false
05-03 09:03:17.555: I/a:33.0(832): b:88.2642954110716
05-03 09:03:17.555: I/a:32.333332(832): b:88.22853019034413
05-03 09:03:17.555: I/a:-102.0(832): b:-89.43829466743345
05-03 09:03:17.555: I/a:86.0(832): b:89.33380002981686
05-03 09:03:17.555: I/list1 in findNum(832): [2, 2, 2, 2]
{
ArrayList array = new ArrayList();
float k;
for (int i = 4; i < lists.Count; i += 4)
{
k = (float)(lists[i].y - lists[i - 4].y) / (float)(lists[i].x - lists[i - 4].x);此处k有可能是无穷大,但是无穷大的结果都丢失了
array.Add(k);
}
return array;
}
public ArrayList findNum(ArrayList array , double s, boolean t)//根据斜率判断笔画序列
{
Log.i("array represent slode of bihua in finNum",String.valueOf(array.toString()));
Log.i("s represent the lengthof bihua in finNum",String.valueOf(s));
Log.i("t represent direction of bihua in finNum",String.valueOf(t));
ArrayList bihuaNum=new ArrayList();
int x=1;
for(int i=0;i<array.size();i++)
{
Float a=(Float)array.get(i);
if(s<60)
{
x=9;
}
else
{
double b=Math.atan((double)a)*180/Math.PI;//斜率转换成角度 a有可能为无穷大但结果中 Log.i("a:"+String.valueOf(a),"b:"+String.valueOf(b));
if (b >= 0 && b < 20 || b > 160 && b <= 180)
{
x = 1; //横
}
else if (b > 70 && b < 110)
{
x = 2; //竖
}
else if (b >= 20 && b <= 70)
{
if (!t) //方向向右下
{
x = 4; //捺
}
else //方向向左上
x = 5; //钩
}
else if (b > -70 && b < -20)
{
if (t) //方向向左下
{ Log.i("pie of bihua in finNum",String.valueOf(b));
x = 3; //撇
}
else //方向向右上
x = 6; //提
}
bihuaNum.add(new Integer(x));
}
}Log.i("list1 in findNum",String.valueOf(bihuaNum.toString()));
return bihuaNum;
}
logcat中的部分信息
05-03 09:03:17.515: I/k:y,x: 33(832): 1.0
05-03 09:03:17.515: I/k:y,x: 97(832): 3.0
05-03 09:03:17.515: I/k:y,x: 102(832): -1.0
05-03 09:03:17.515: I/k:y,x: 86(832): 1.0
05-03 09:03:17.545: I/loc in Feature(832): [Point(216, 133), Point(216, 135), Point(216, 146), Point(217, 155), Point(217, 166), Point(218, 183), Point(220, 219), Point(220, 240), Point(220, 263), Point(219, 295), Point(218, 331), Point(219, 358), Point(219, 365), Point(219, 387), Point(219, 419), Point(219, 439), Point(220, 451), Point(220, 452)]
05-03 09:03:17.555: I/alist in Feature and return alist(832): [33.0, 32.333332, -102.0, 86.0]
05-03 09:03:17.555: I/the size of lists in direction(832): 18
05-03 09:03:17.555: I/System.out(832): 216*220
05-03 09:03:17.555: I/c in direction(832): -4
05-03 09:03:17.555: I/in direction(832): false
05-03 09:03:17.555: I/array represent slode of bihua in finNum(832): [33.0, 32.333332, -102.0, 86.0]
05-03 09:03:17.555: I/s represent the lengthof bihua in finNum(832): 319.02507738420815
05-03 09:03:17.555: I/t represent direction of bihua in finNum(832): false
05-03 09:03:17.555: I/a:33.0(832): b:88.2642954110716
05-03 09:03:17.555: I/a:32.333332(832): b:88.22853019034413
05-03 09:03:17.555: I/a:-102.0(832): b:-89.43829466743345
05-03 09:03:17.555: I/a:86.0(832): b:89.33380002981686
05-03 09:03:17.555: I/list1 in findNum(832): [2, 2, 2, 2]
解决方案 »
- 急!!求帮看一下android XML的问题T.T
- android手机管理软件怎么实现的
- Android 能不能调用本地的微博客户端
- 帮忙写一个算法排序算法,在线等。
- 高手指点 android系统 找不到系统默认的声音
- 在manifest文件中需要加上default的category才能实现跳转的问题
- 在android程序代码里 如何设置 android:layout_gravity属性值?
- 求助,新手求帮助,求大神搭救,项目的关键字无法识别问题
- 一个Fragment练习中碰到的问题
- textview上下垂直无限滚动如何实现 类试淘宝效果
- intent不能跳转的问题,求解
- android语音识别的一点问题
{
ArrayList array=new ArrayList();
float k;
for(int i=4;i<lists.size();i+=4)
{
k=(float)(lists.get(i).y-lists.get(i-4).y)/(float)(lists.get(i).x-lists.get(i-4).x);
Log.i("k:y,x: "+String.valueOf(lists.get(i).y-lists.get(i-4).y),String.valueOf((float)(lists.get(i).x-lists.get(i-4).x)));
array.add(new Float(k));
}
return array;
}
我第一个函数里的信息在上面的logcat里面只显示了不是无穷大的情况,刚才贴的第一个函数里漏掉了一句在Logcat里显示k取值的情况
float b = 0.0f;
float c = a / b;
float d = (float)Math.atan(c);这么测试下很累人么?
public ArrayList slode(ArrayList<Point > lists)//找斜率
{
ArrayList array=new ArrayList();
float k;
for(int i=4;i<lists.size();i+=4)
{
k=(float)(lists.get(i).y-lists.get(i-4).y)/(float)(lists.get(i).x-lists.get(i-4).x);
if(Double.isInfinite(k))
{
Log.i(String.valueOf(lists.size()),"k is infinite");
}
Log.i("k:y,x: "+String.valueOf(lists.get(i).y-lists.get(i-4).y),String.valueOf((float)(lists.get(i).x-lists.get(i-4).x)));
array.add(new Float(k));
}
return array;
}
Log.cat里面的相关信息如下:05-03 11:53:17.245: I/k:y,x: 21(887): 1.0
05-03 11:53:17.245: I/k:y,x: 40(887): 1.0
05-03 11:53:17.245: I/47(887): k is infinite
05-03 11:53:17.245: I/k:y,x: 43(887): 0.0
05-03 11:53:17.245: I/47(887): k is infinite
05-03 11:53:17.245: I/k:y,x: 40(887): 0.0
05-03 11:53:17.245: I/47(887): k is infinite
05-03 11:53:17.255: I/k:y,x: 36(887): 0.0
05-03 11:53:17.255: I/k:y,x: 31(887): -1.0
05-03 11:53:17.255: I/47(887): k is infinite
05-03 11:53:17.255: I/k:y,x: 20(887): 0.0
05-03 11:53:17.276: I/k:y,x: 21(887): -1.0
05-03 11:53:17.276: I/47(887): k is infinite
05-03 11:53:17.276: I/k:y,x: 15(887): 0.0
05-03 11:53:17.276: I/47(887): k is infinite
05-03 11:53:17.276: I/k:y,x: 19(887): 0.0
05-03 11:53:17.276: I/47(887): k is infinite
05-03 11:53:17.276: I/k:y,x: 21(887): 0.0
你看没看我发的Logcat里面的信息啊
d=1.5707964,为什么不是无穷大呢
我程序里k是无穷大时根本就放不进array数组里,怎么办?