幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4580|回复: 16

[求助]J2ME支持Math class的问题。。。

[复制链接]
好人卡的 该用户已被删除
发表于 2007-6-10 06:40:51 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

20

主题

197

帖子

2641

积分

⑥精研

积分
2641
QQ
发表于 2007-6-10 07:21:43 | 显示全部楼层
主要是因为midp2.0仍不支持浮点数,所以在math下只有abs,max,min三个函数,还是用第三方类吧,或者用定值法,实际上你可以察看MIDP的API文档,都有详细列表的,一查就清清楚楚。
签名要少于60,SO,i haven't upload my pic
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
 楼主| 发表于 2007-6-11 19:01:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

7

主题

190

帖子

1766

积分

⑥精研

....

积分
1766
发表于 2007-6-11 20:31:04 | 显示全部楼层
CLDC1.0确实不支持浮点数
[s:5]但是SIN我们可以自己使用查表法模拟实现.
// 0, 10, 20, 30, 40, 50, 60, 70, 80, 90角度的sin值 ,全部乘以256得到的一个对应表数组
    private static final int[] SINES =
        { 0, 44, 88, 128, 165, 196, 222, 241, 252, 256 };


    // angle是实际角度除以10,所以90度的angle就为9,360度全圆的angle就是36
    private static int sineTimes256(int angle)
    {
        angle %= 36;    // 360度以上
        if (angle <= 9)          // 0到90度
        {
            return SINES[angle];
        }
        else if (angle <= 18)    // 90到180度
        {
            return SINES[18-angle];
        }
        else if (angle <= 27)    // 180到270度
        {
            return -SINES[angle-18];
        }
        else                     // 270到360度        {
            return -SINES[36-angle];
        }
    }


    // angle是实际角度除以10,所以90度的angle就为9,360度全圆的angle就是36
    private static int cosineTimes256(int angle)
    {
        return sineTimes256(angle + 9);     
    }


之后只要调用sineTimes256和cosineTimes256函数就OK了,参数传角度的1/10
但这仅仅是模拟运算,求值是不精确的,效率比较高.
当然,你可以考虑使用更详细的表,当然会牺牲一些效率. [s:1]
萝卜啊,白菜啊,土豆星啊,梦想有爱啊。
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
 楼主| 发表于 2007-6-12 00:47:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

7

主题

190

帖子

1766

积分

⑥精研

....

积分
1766
发表于 2007-6-12 16:26:11 | 显示全部楼层
上帝给了我们手和脑,就是让我们去创造.没有平方根函数的话,继续自己写咯~
private final int sqrt(int n)
  {
    int r, l, t;
    // 100以内数字求平方根
    if (n < 100)
    {
      r = 9;
      while (n < r * r)
      {
      r--;
      }
    }
    else {
    // 大于100的数
      r = sqrt(n / 100);
      l = n - r * r * 100;
      t = l / (r * 20);
      while (t * (r * 20 + t) > l) t--;
      r = r * 10 + t;
    }
    return r;
  }


[s:5]
萝卜啊,白菜啊,土豆星啊,梦想有爱啊。
回复 支持 反对

使用道具 举报

20

主题

197

帖子

2641

积分

⑥精研

积分
2641
QQ
发表于 2007-6-12 17:11:45 | 显示全部楼层
唉呀呀......又被抢先了.....
签名要少于60,SO,i haven't upload my pic
回复 支持 反对

使用道具 举报

20

主题

197

帖子

2641

积分

⑥精研

积分
2641
QQ
发表于 2007-6-12 17:32:57 | 显示全部楼层
不得不说.真配服duzhi3658我想的算法的复杂度太高了....而且结果也不精确.....配服配服..... [s:2]
我的想法是先转成STRING类....按两位进行存储.....最后在手动开方方法来解决....唉....突然发现算法效率不高....
签名要少于60,SO,i haven't upload my pic
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
 楼主| 发表于 2007-6-13 08:28:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

7

主题

190

帖子

1766

积分

⑥精研

....

积分
1766
发表于 2007-6-13 16:07:55 | 显示全部楼层
引用第8楼好人卡的神话于2007-06-13 00:28发表的  :


这个有点Orz了。。。还是避免使用平方根好了。其实sin cos的那个把1-90的全部都算出来存住就精确多了。


放大10000倍后的SIN,COS数组

public   static   int   SIN[]   =   {   
                                                              0,   174,   348,   523,   697,   871,   1045,   1218,   1391,   
                                                              1564,   1736,   
                                                              1908,   2079,   2249,   2419,   2588,   2756,   2923,   3090,   
                                                              3255,   3420,   
                                                              3583,   3746,   3907,   4067,   4226,   4383,   4539,   4694,   
                                                              4848,   4999,   
                                                              5150,   5299,   5446,   5591,   5735,   5877,   6018,   6156,   
                                                              6293,   6427,   
                                                              6560,   6691,   6819,   6946,   7071,   7193,   7313,   7431,   
                                                              7547,   7660,   
                                                              7771,   7880,   7986,   8090,   8191,   8290,   8386,   8480,   
                                                              8571,   8660,   
                                                              8746,   8829,   8910,   8987,   9063,   9135,   9205,   9271,   
                                                              9335,   9396,   
                                                              9455,   9510,   9563,   9612,   9659,   9702,   9743,   9781,   
                                                              9816,   9848,   
                                                              9876,   9902,   9925,   9945,   9961,   9975,   9986,   9993,   
                                                              9998,   10000,   
                                                              9998,   9993,   9986,   9975,   9961,   9945,   9925,   9902,   
                                                              9876,   9848,   
                                                              9816,   9781,   9743,   9702,   9659,   9612,   9563,   9510,   
                                                              9455,   9396,   
                                                              9335,   9271,   9205,   9135,   9063,   8987,   8910,   8829,   
                                                              8746,   8660,   
                                                              8571,   8480,   8386,   8290,   8191,   8090,   7986,   7880,   
                                                              7771,   7660,   
                                                              7547,   7431,   7313,   7193,   7071,   6946,   6819,   6691,   
                                                              6560,   6427,   
                                                              6293,   6156,   6018,   5877,   5735,   5591,   5446,   5299,   
                                                              5150,   4999,   
                                                              4848,   4694,   4539,   4383,   4226,   4067,   3907,   3746,   
                                                              3583,   3420,   
                                                              3255,   3090,   2923,   2756,   2588,   2419,   2249,   2079,   
                                                              1908,   1736,   
                                                              1564,   1391,   1218,   1045,   871,   697,   523,   348,   174,   
                                                              0,   
                                                              -174,   -348,   -523,   -697,   -871,   -1045,   -1218,   -1391,   
                                                              -1564,   -1736,   
                                                              -1908,   -2079,   -2249,   -2419,   -2588,   -2756,   -2923,   
                                                              -3090,   -3255,   -3420,   
                                                              -3583,   -3746,   -3907,   -4067,   -4226,   -4383,   -4539,   
                                                              -4694,   -4848,   -5000,   
                                                              -5150,   -5299,   -5446,   -5591,   -5735,   -5877,   -6018,   
                                                              -6156,   -6293,   -6427,   
                                                              -6560,   -6691,   -6819,   -6946,   -7071,   -7193,   -7313,   
                                                              -7431,   -7547,   -7660,   
                                                              -7771,   -7880,   -7986,   -8090,   -8191,   -8290,   -8386,   
                                                              -8480,   -8571,   -8660,   
                                                              -8746,   -8829,   -8910,   -8987,   -9063,   -9135,   -9205,   
                                                              -9271,   -9335,   -9396,   
                                                              -9455,   -9510,   -9563,   -9612,   -9659,   -9702,   -9743,   
                                                              -9781,   -9816,   -9848,   
                                                              -9876,   -9902,   -9925,   -9945,   -9961,   -9975,   -9986,   
                                                              -9993,   -9998,   -10000,   
                                                              -9998,   -9993,   -9986,   -9975,   -9961,   -9945,   -9925,   
                                                              -9902,   -9876,   -9848,   
                                                              -9816,   -9781,   -9743,   -9702,   -9659,   -9612,   -9563,   
                                                              -9510,   -9455,   -9396,   
                                                              -9335,   -9271,   -9205,   -9135,   -9063,   -8987,   -8910,   
                                                              -8829,   -8746,   -8660,   
                                                              -8571,   -8480,   -8386,   -8290,   -8191,   -8090,   -7986,   
                                                              -7880,   -7771,   -7660,   
                                                              -7547,   -7431,   -7313,   -7193,   -7071,   -6946,   -6819,   
                                                              -6691,   -6560,   -6427,   
                                                              -6293,   -6156,   -6018,   -5877,   -5735,   -5591,   -5446,   
                                                              -5299,   -5150,   -5000,   
                                                              -4848,   -4694,   -4539,   -4383,   -4226,   -4067,   -3907,   
                                                              -3746,   -3583,   -3420,   
                                                              -3255,   -3090,   -2923,   -2756,   -2588,   -2419,   -2249,   
                                                              -2079,   -1908,   -1736,   
                                                              -1564,   -1391,   -1218,   -1045,   -871,   -697,   -523,   
                                                              -348,   -174};   


public   static   int   COS[]   =   {   
                                                              10000,   9998,   9993,   9986,   9975,   9961,   9945,   9925,   
                                                              9902,   9876,   9848,   
                                                              9816,   9781,   9743,   9702,   9659,   9612,   9563,   9510,   
                                                              9455,   9396,   
                                                              9335,   9271,   9205,   9135,   9063,   8987,   8910,   8829,   
                                                              8746,   8660,   
                                                              8571,   8480,   8386,   8290,   8191,   8090,   7986,   7880,   
                                                              7771,   7660,   
                                                              7547,   7431,   7313,   7193,   7071,   6946,   6819,   6691,   
                                                              6560,   6427,   
                                                              6293,   6156,   6018,   5877,   5735,   5591,   5446,   5299,   
                                                              5150,   5000,   
                                                              4848,   4694,   4539,   4383,   4226,   4067,   3907,   3746,   
                                                              3583,   3420,   
                                                              3255,   3090,   2923,   2756,   2588,   2419,   2249,   2079,   
                                                              1908,   1736,   
                                                              1564,   1391,   1218,   1045,   871,   697,   523,   348,   174,   
                                                              0,   
                                                              -174,   -348,   -523,   -697,   -871,   -1045,   -1218,   -1391,   
                                                              -1564,   -1736,   
                                                              -1908,   -2079,   -2249,   -2419,   -2588,   -2756,   -2923,   
                                                              -3090,   -3255,   -3420,   
                                                              -3583,   -3746,   -3907,   -4067,   -4226,   -4383,   -4539,   
                                                              -4694,   -4848,   -4999,   
                                                              -5150,   -5299,   -5446,   -5591,   -5735,   -5877,   -6018,   
                                                              -6156,   -6293,   -6427,   
                                                              -6560,   -6691,   -6819,   -6946,   -7071,   -7193,   -7313,   
                                                              -7431,   -7547,   -7660,   
                                                              -7771,   -7880,   -7986,   -8090,   -8191,   -8290,   -8386,   
                                                              -8480,   -8571,   -8660,   
                                                              -8746,   -8829,   -8910,   -8987,   -9063,   -9135,   -9205,   
                                                              -9271,   -9335,   -9396,   
                                                              -9455,   -9510,   -9563,   -9612,   -9659,   -9702,   -9743,   
                                                              -9781,   -9816,   -9848,   
                                                              -9876,   -9902,   -9925,   -9945,   -9961,   -9975,   -9986,   
                                                              -9993,   -9998,   -10000,   
                                                              -9998,   -9993,   -9986,   -9975,   -9961,   -9945,   -9925,   
                                                              -9902,   -9876,   -9848,   
                                                              -9816,   -9781,   -9743,   -9702,   -9659,   -9612,   -9563,   
                                                              -9510,   -9455,   -9396,   
                                                              -9335,   -9271,   -9205,   -9135,   -9063,   -8987,   -8910,   
                                                              -8829,   -8746,   -8660,   
                                                              -8571,   -8480,   -8386,   -8290,   -8191,   -8090,   -7986,   
                                                              -7880,   -7771,   -7660,   
                                                              -7547,   -7431,   -7313,   -7193,   -7071,   -6946,   -6819,   
                                                              -6691,   -6560,   -6427,   
                                                              -6293,   -6156,   -6018,   -5877,   -5735,   -5591,   -5446,   
                                                              -5299,   -5150,   -5000,   
                                                              -4848,   -4694,   -4539,   -4383,   -4226,   -4067,   -3907,   
                                                              -3746,   -3583,   -3420,   
                                                              -3255,   -3090,   -2923,   -2756,   -2588,   -2419,   -2249,   
                                                              -2079,   -1908,   -1736,   
                                                              -1564,   -1391,   -1218,   -1045,   -871,   -697,   -523,   
                                                              -348,   -174,   0,   
                                                              174,   348,   523,   697,   871,   1045,   1218,   1391,   1564,   
                                                              1736,   
                                                              1908,   2079,   2249,   2419,   2588,   2756,   2923,   3090,   
                                                              3255,   3420,   
                                                              3583,   3746,   3907,   4067,   4226,   4383,   4539,   4694,   
                                                              4848,   5000,   
                                                              5150,   5299,   5446,   5591,   5735,   5877,   6018,   6156,   
                                                              6293,   6427,   
                                                              6560,   6691,   6819,   6946,   7071,   7193,   7313,   7431,   
                                                              7547,   7660,   
                                                              7771,   7880,   7986,   8090,   8191,   8290,   8386,   8480,   
                                                              8571,   8660,   
                                                              8746,   8829,   8910,   8987,   9063,   9135,   9205,   9271,   
                                                              9335,   9396,   
                                                              9455,   9510,   9563,   9612,   9659,   9702,   9743,   9781,   
                                                              9816,   9848,   
                                                              9876,   9902,   9925,   9945,   9961,   9975,   9986,   9993,   
                                                              9998};   
   

值得注意的是,这俩数组占用内存为2.8K.恩,若是手机平台,真的要悠着点用
萝卜啊,白菜啊,土豆星啊,梦想有爱啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-2 07:41 , Processed in 0.023836 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表