国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

J2ME中定點庫MathFP使用入門

2019-11-18 15:46:08
字體:
來源:轉載
供稿:網友
      眾所周知,CLDC1.0是不支持小數運算的,而CLDC1.1才支持浮點運算。但是目前市面上的手機,絕大部分是采用CLDC1.0這種configuration。那我們需要進行小數運算怎么辦呢?比如說要繪制任意角度的飛機運行軌跡。

    你當然可以自己寫一個類,用整數來模擬定點小數運算(模擬浮點小數運算非常困難),不過你不必重新發明輪子,網上有很多用整數運算來模擬小數運算的代碼庫,而MathFP就是其中非常優秀的一個,它健壯,穩定,高速,是在J2ME環境中進行小數運算的不二之選,而且最要害的是,它的體積很小。MathFP的下載地址是:http://home.rochester.rr.com/ohom

mes/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在設備上繪制效果如下圖:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新乡县| 新竹县| 武城县| 乐陵市| 克山县| 鄯善县| 彩票| 泰和县| 溧阳市| 新龙县| 青海省| 乐陵市| 南岸区| 兴隆县| 湟源县| 眉山市| 老河口市| 遵化市| 循化| 丰顺县| 江陵县| 淄博市| 新巴尔虎左旗| 会东县| 宁安市| 沙河市| 桓台县| 永吉县| 乳山市| 北海市| 石泉县| 凉城县| 额敏县| 罗平县| 西平县| 孟津县| 师宗县| 灵川县| 台江县| 平武县| 波密县|