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]

解决方案 »

  1.   

    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);
    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取值的情况
      

  2.   

    不要太相信自己的推导是可靠,人总是会犯错误的,否则程序就不会有bug了。float a = 1.0f;
    float b = 0.0f;
    float c = a / b;
    float d = (float)Math.atan(c);这么测试下很累人么?
      

  3.   

    我测试过了啊,就是丢失了数据,
    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里面的信息啊
      

  4.   

    你给的在程序里测试结果如下:
    d=1.5707964,为什么不是无穷大呢

    我程序里k是无穷大时根本就放不进array数组里,怎么办?