亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Jni技術(shù)局部區(qū)域抽取技術(shù)的研究

        2017-07-24 17:48:15◆張
        關(guān)鍵詞:區(qū)域方法

        ◆張 躍

        (渤海船舶職業(yè)學(xué)院 遼寧 125105)

        基于Jni技術(shù)局部區(qū)域抽取技術(shù)的研究

        ◆張 躍

        (渤海船舶職業(yè)學(xué)院 遼寧 125105)

        在三維圖形中,對區(qū)域進(jìn)行不規(guī)則的劃分,并對劃分后區(qū)域內(nèi)的地形進(jìn)行抽取有著非常重要的應(yīng)用。通常三維圖形其邊界多是不規(guī)則的,因此使用球,正方形等規(guī)則圖形進(jìn)行區(qū)域的選擇存在一定的局限性,并且通過程序來判斷三角形是否在指定的區(qū)域內(nèi)部是繁瑣的。因此本文使用了Windows API函數(shù),利用Jni接口在Java中調(diào)用API函數(shù),簡化了區(qū)域的不規(guī)則劃分及區(qū)域內(nèi)部三角形的抽取過程。

        Jni技術(shù);API函數(shù);局域區(qū)域抽取

        0 引言

        局域區(qū)域的抽取技術(shù)在三維圖形中,有著非常重要的應(yīng)用。它包括兩個(gè)部分的操作,一是在三角網(wǎng)格模型上交互式指定局域區(qū)域,二是對劃分后的局域區(qū)域進(jìn)行抽取。

        一般來說,用戶在網(wǎng)格上選擇幾個(gè)頂點(diǎn)作為控制點(diǎn),然后用多面體曲面上的線將相鄰的控制點(diǎn)連接起來成為一個(gè)環(huán),這個(gè)環(huán)圍成的區(qū)域就是用戶選擇的區(qū)域。當(dāng)區(qū)域劃分后,首先必須知道有哪些三角形在區(qū)域的內(nèi)部以及這些三角形的三點(diǎn)坐標(biāo)值,然后把在區(qū)域內(nèi)部的三角形挑選出來。這樣就需要判斷一個(gè)點(diǎn)是否在一個(gè)指定區(qū)域的內(nèi)部。傳統(tǒng)的判斷點(diǎn)在三角形內(nèi)的算法有面積法,向量法等。這些方法都各有其缺點(diǎn),比如面積法,計(jì)算量比較大,不能跟后續(xù)的處理相配合等弊端。

        本文研究的是基于Jni技術(shù)的區(qū)域劃分及區(qū)域內(nèi)三角形的篩選,通過Windows API中的PtInRegion函數(shù)和CreatePolygonRgn函數(shù)來簡化實(shí)現(xiàn)過程。

        1 Jni技術(shù)簡介

        Java本地接口(Java Native Interface, Jni)屬于JDK的一部分,是Java提供的一個(gè)工具,它使程序員能使用除Java之外其他語言寫的代碼。通過使用Jni編寫程序,可以讓代碼方便地實(shí)現(xiàn)跨平臺特性。Jni在不同平臺上的實(shí)現(xiàn)步驟相同。除了生成動態(tài)鏈接庫的方法不同外,其他實(shí)現(xiàn)方法是相同的。

        Jni允許運(yùn)行在Java虛擬機(jī)上的Java代碼操作其他語言(例如C、匯編語言)編寫的應(yīng)用程序和庫。從Java中調(diào)用C/C++的具體實(shí)現(xiàn)步驟如下:

        (1)聲明一個(gè)本地方法,它與普通方法相似,只是加上關(guān)鍵字”native”作為前綴,而且沒有方法體。本地方法的實(shí)現(xiàn)放在系統(tǒng)的動態(tài)鏈接庫中,在windows環(huán)境下為dll文件。

        (2)在調(diào)用本地方法的Java類中用System.loadLibrary加載存放本地方法的動態(tài)鏈接庫。

        (3)編譯該類,并用Javah帶參出-Jni來產(chǎn)生本地方法原型的頭文件。

        (4)用C/C++實(shí)現(xiàn)本地方法,并通過編譯、連接生成動態(tài)鏈接庫。

        除了互操作方面的作用之外, Jni允許你執(zhí)行進(jìn)一步的任務(wù),包括: (1)拋出和捕捉來自本地方法的異常,然后讓Java應(yīng)用程序?qū)@些異常進(jìn)行處理;(2)通過Invocation API,你可以將JVM嵌入本地應(yīng)用程序;(3)專門的Jni函數(shù)允許本地方法裝載Java類并獲得類的信息;(4)本地方法可以使用JNI來執(zhí)行運(yùn)行時(shí)的檢查。

        2 技術(shù)實(shí)現(xiàn)

        首先需要進(jìn)行局部區(qū)域的劃分,由于正方形,矩形,球形等區(qū)域選擇的局限性,因此想利用多邊形區(qū)域進(jìn)行選擇。API函數(shù)中的CreatePolygonRgn函數(shù)的主要用途就是創(chuàng)建一個(gè)由一系列點(diǎn)所圍成的多邊形區(qū)域。通過用戶用鼠標(biāo)在三角網(wǎng)模型中點(diǎn)擊出想要局部貼圖的多邊形區(qū)域。圖1為區(qū)域選擇的效果圖。

        圖1 區(qū)域選擇

        區(qū)域劃分后,要想把區(qū)域抽取出來,首先必須知道有哪些三角形在區(qū)域的內(nèi)部以及這些三角形的三點(diǎn)坐標(biāo)值,然后才能把區(qū)域內(nèi)部的三角形挑選出來。這樣就需要判斷一個(gè)點(diǎn)是否在一個(gè)指定區(qū)域的內(nèi)部。傳統(tǒng)的判斷點(diǎn)在三角形內(nèi)的算法有面積法,向量法等。這些方法都各有其缺點(diǎn),比如面積法,計(jì)算量比較大,不能跟后續(xù)的處理(如:消除隱藏面)相配合等弊端。而API函數(shù)PtInRegion的主要作用就是判斷點(diǎn)是否在指定的區(qū)域內(nèi)部,并且有返回值。通過判斷點(diǎn)是否在區(qū)域的內(nèi)部來判斷有哪些三角形在區(qū)域的內(nèi)部,來完成區(qū)域內(nèi)三角形的篩選。

        在Java中要直接實(shí)現(xiàn)API函數(shù)有一定的困難,因此本算法中使用了Jni,它允許Java代碼和其他語言寫的代碼進(jìn)行交互,用于為Java提供一個(gè)本地代碼的接口。寫一個(gè)Java類,在這個(gè)類中包含了需要調(diào)用的本地方法的描述。

        public native void pJudge(int[] x,int[] y);

        static

        { System.loadLibrary("kk"); }

        使用VC來編寫本地方法的實(shí)現(xiàn)函數(shù),最后編譯成.dll文件,其程序片段如下:

        #include "jni.h"

        #include

        #include "Circle.h"

        #include

        JNIEXPORT void JNICALL Java_Circle_pJudge(JNIEnv *env,jobject, jintArray array, jintArray array1)

        { int len =env->GetArrayLength(array);jint* elems =env-> GetIntArrayElements(array, 0);

        jint* judge =env-> GetIntArrayElements(array1, 0);

        const POINT co[]={};

        HRGN hRgn=CreatePolygonRgn(co,4,ALTERNATE);

        int flag=(int)PtInRegion(hRgn,judge[0],judge[1]);

        judge[2]=flag;

        env->SetIntArrayRegion(array1,0,3,judge); }

        用戶通過鼠標(biāo)點(diǎn)擊后,將獲得的多邊形區(qū)域的各個(gè)頂點(diǎn)的坐標(biāo)數(shù)據(jù)以及所要判斷的是否在該區(qū)域內(nèi)的點(diǎn)的坐標(biāo)數(shù)據(jù)通過 Jni接口導(dǎo)入VC中,再利用CreatePolygonRgn和PtInRegion函數(shù)計(jì)算,將VC中計(jì)算后得到的結(jié)果再通過JNI接口傳回到Java程序中。這樣完成了區(qū)域的快速劃分及局部區(qū)域的拾取。

        在這一過程,把各個(gè)三角形中心坐標(biāo)信息寫入到數(shù)據(jù)結(jié)構(gòu)中,并使用三角形中心坐標(biāo)來代替此三角形進(jìn)行計(jì)算,可以避免三角形共點(diǎn)產(chǎn)生的重復(fù)計(jì)算而引起的耗費(fèi)過多計(jì)算時(shí)間問題。數(shù)據(jù)結(jié)構(gòu)的具體設(shè)計(jì)為:

        點(diǎn)類:

        import java.util.*;

        class Point{

        int pointnumber;

        float x,y,z;

        String trianglenumber;

        Point(int pointnumber,float x,float y,float z,String trianglenumber)

        {this.pointnumber=pointnumber;

        this.x=x;

        this.y=y;

        this.z=z;

        this.trianglenumber=trianglenumber;}}

        三角形類:

        import java.util.*;

        class Triangle{

        int trianglenumber;

        String pointnumber;

        Point(int trianglenumber,String pointnumber)

        {this.trianglenumber=trianglenumber;

        this.pointnumber=pointnumber;} }

        重心類:

        import java.util.*;

        class Focus{

        int focusnumber;

        float x,y,z;

        String trianglenumber;

        Point(int focusrnumber,float x,float y,float z,String trianglenumber)

        {this.focusnumber=focusnumber;

        this.x=x;

        this.y=y;

        this.z=z;

        this.trianglenumber=trianglenumber;} }

        3 結(jié)論

        本算法可以在三維圖形應(yīng)用中,快速實(shí)現(xiàn)區(qū)域劃分及劃分后區(qū)域的篩選工作,但是更多適用于精度要求較低的情況。同時(shí)本文也給出了在Java中調(diào)用Windows API函數(shù)的常用方法。

        [1]劉剛,金小剛,馮結(jié)青,彭群生.稠密網(wǎng)格上交互指定局部區(qū)域的新方法.計(jì)算機(jī)工程與應(yīng)用,2003.

        [2]沙嘉祥,寧書寧,林捷.利用JNI實(shí)現(xiàn)企業(yè)JAVA程序與傳統(tǒng)應(yīng)用程序的集成.計(jì)算機(jī)現(xiàn)代化,2004.

        猜你喜歡
        區(qū)域方法
        永久基本農(nóng)田集中區(qū)域“禁廢”
        分割區(qū)域
        學(xué)習(xí)方法
        可能是方法不對
        關(guān)于四色猜想
        分區(qū)域
        用對方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        賺錢方法
        捕魚
        中文字幕在线日亚洲9| 成人大片在线观看视频| 国产精品毛片无码久久| 麻豆婷婷狠狠色18禁久久| 91久久国产香蕉熟女线看 | 国产美女裸身网站免费观看视频| 风韵丰满熟妇啪啪区老熟熟女| 国产成人综合久久精品推荐免费| 少女高清影视在线观看动漫| 亚洲第一女人的天堂av| 日日摸夜夜欧美一区二区| 国产69久久精品成人看| 国产精品综合女同人妖| 亚洲 国产 韩国 欧美 在线| 少妇被粗大的猛烈进出免费视频| 亚洲精品一区二区三区播放| 中文字幕在线精品视频入口一区| 精品亚洲第一区二区三区| 日韩成人精品日本亚洲| 一卡二卡三卡视频| 伊人久久大香线蕉午夜av | 桃红色精品国产亚洲av| 国产成人精品蜜芽视频| 四虎影视国产在线观看精品| 丰满人妻一区二区三区免费视频| 在线亚洲国产一区二区三区 | 欧美日本精品一区二区三区| 日本一区二区三区爱爱视频| 国产精品三级av一区二区 | 麻豆国产精品一区二区三区| 精品久久久久久电影院| 亚州综合激情另类久久久| 国产大片黄在线观看| 一本色道久久88—综合亚洲精品| 亚洲 国产 韩国 欧美 在线| 国内精品一区视频在线播放| 久久久www成人免费毛片| 色哟哟亚洲色精一区二区| 五月婷婷激情六月开心| 亚洲欧洲一区二区三区波多野| 熟妇人妻AV中文字幕老熟妇|