麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

關于J2ME中定點庫MathFP使用入門

2019-11-18 12:45:42
字體:
來源:轉載
供稿:網友

  眾所周知,CLDC1.0是不支持小數運算的,而CLDC1.1才支持浮點運算。但是目前市面上的手機,絕大部分是采用CLDC1.0這種configuration.那我們需要進行小數運算怎么辦呢?比如說要繪制任意角度的飛機運行軌跡。你當然可以自己寫一個類,用整數來模擬定點小數運算(模擬浮點小數運算非常困難),不過你不必重新發明輪子,網上有很多用整數運算來模擬小數運算的代碼庫,而MathFP就是其中非常優秀的一個,它健壯,穩定,高速,是在J2ME環境中進行小數運算的不二之選,而且最要害的是,它的體積很小。MathFP的下載地址是: http://home.rochester.rr.com/ohommes/MathFP.我下載的版本是基于CLDC的,下載的MathFP版本號是1.1.2.下載回來的全部東西就是一個MathFP.class(該類所在的包名是net.jscience.util),你可以把該類置于你的classpath中進行開發,發布軟件的時候把該class加入到jar文件中。或者你也可以把該class反編譯,得到源碼,直接放入你的工程的src目錄中,我這里采用的是后一種做法。記得同時把MathFP的API文檔下載回來。
  
  因為MathFP是用整數來模擬定點小數的,所以小數的內部表現形式還是一個整數,但是你一定要記得把表示小數的整數和真正的整數區別開來,否則就會造成很多難于調試的bug(一個小技巧就是表示小數的整形變量名以FP為后綴).你只需要把握一個原則,就是首先把要參與小數運算的整數都轉換成小數,然后進行小數運算,運算完了以后,再把結果轉換成成整數使用。
  
  下面的這個例子,就是用來演示MathFP的基本使用方法的。假定屏幕左下角有一個點,每隔100毫秒,就沿60度的角度向東北方向運動5個像素,繪制出此點的運動軌跡。這個例子涉及到小數和三角運算,因為該點x坐標的增量是cos60(度),y坐標上的增量是-sin60(度)。我們來看代碼怎么寫
  
  import javax.microedition.lcdui.Canvas;
  import javax.microedition.lcdui.Graphics;
  
  import net.jscience.util.MathFP;
  
  /**
  * 小數運算演示Canvas
  * @author Jagie
  *
  */
  public class FloatCanvas extends Canvas implements Runnable {
  //用于統計屏幕刷新次數
  int paintCount;
  //屏幕寬度,高度。定點數
  int w_FP, h_FP;
  //當前點坐標,前一點坐標,定點數
  int curX_FP, curY_FP, lastX_FP, lastY_FP;
  //速率
  public static final int RATE = 5;
  
  public FloatCanvas() {
  w_FP = MathFP.toFP(this.getWidth());
  h_FP = MathFP.toFP(this.getHeight());
  //開始點處于屏幕的左下角
  lastX_FP = MathFP.toFP(0);
  lastY_FP = h_FP;
  new Thread(this).start();
  }
  
  PRotected void paint(Graphics g) {
  //第一次只是清屏
  if (paintCount == 0) {
  g.setColor(0);
  g.fillRect(0, 0, w_FP, h_FP);
  }else{
  //畫線
  g.setColor(0x00ff00);
  //把定點數轉換成整數
  g.drawLine(MathFP.toInt(lastX_FP), MathFP.toInt(lastY_FP), MathFP
  .toInt(curX_FP), MathFP.toInt(curY_FP));
  }
  
  paintCount++;
  
  }
  
  public void run() {
  //當前點沒有超出屏幕時循環
  while (curX_FP <= w_FP && curY_FP <= h_FP && MathFP.toInt(curX_FP) >= 0
  && MathFP.toInt(curY_FP) >= 0) {
  //60度角度轉換成弧度
  int radians = MathFP.div(MathFP.mul(MathFP.toFP(60), MathFP.PI),
  MathFP.toFP(180));
  //x方向增量
  int deltaX = MathFP.mul(MathFP.toFP(RATE), MathFP.cos(radians));
  //y方向增量
  int deltaY = MathFP.mul(MathFP.toFP(RATE), MathFP.sin(radians));
  //新坐標,定點數
  curX_FP = lastX_FP + deltaX;
  curY_FP = lastY_FP - deltaY;
  System.out.println(curX_FP + "," + curY_FP);
  repaint();
  try {
  Thread.sleep(100);
  } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  //新坐標成為舊坐標
  lastX_FP = curX_FP;
  lastY_FP = curY_FP;
  }
  }
  
  }
  
  該Canvas在設備上繪制效果如下圖:
  
關于J2ME中定點庫MathFP使用入門

  大家可以看到,曲線正沿60度角的方向朝東北方向不停的增長.
  
  有了這個定點庫,我們就能在游戲中使用小數運算了,所以一些簡單的游戲物理算法也可以使用了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天天透天天狠天天爱综合97 | 久久久久中精品中文字幕19 | 国产精品久久久久久影院8一贰佰 | 福利在线小视频 | www.guochan| 国产91久久精品 | 欧美a久久| 午夜精品久久久久久久99热浪潮 | 九九热在线视频免费观看 | 日本精品久久久久 | 久久出精品 | 国产盼盼私拍福利视频99 | 日本a级一区 | 精品在线免费播放 | 全免费午夜一级毛片真人 | 美女黄视频在线观看 | 国产成人精品网站 | 美女久久 | 久久精品在线免费观看 | 国产精品高潮99久久久久久久 | 无码专区aaaaaa免费视频 | 一区二区三区四区高清视频 | 日本免费不卡一区二区 | xxxxhd86日本护士hd | 一区免费 | 成年人黄色片视频 | 精品国产乱码久久久久久丨区2区 | 欧美日韩免费在线观看视频 | 91精品国产乱码久久久久久久久 | 精品亚洲网站 | 国产99久久精品一区二区300 | 91社区在线观看 | 九九精品在线观看 | 久久91精品视频 | 91香蕉国产亚洲一区二区三区 | 国产一区二区三区影视 | 欧美精品一区二区视频 | 一区二区久久久久草草 | 蜜桃麻豆视频 | 羞羞视频免费网站男男 | 国产三级三级三级三级 |