999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2017-07-24 17:48:15◆張
網(wǎng)絡安全技術與應用 2017年7期
關鍵詞:區(qū)域方法

◆張 躍

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

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

◆張 躍

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

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

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

0 引言

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

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

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

1 Jni技術簡介

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

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

(1)聲明一個本地方法,它與普通方法相似,只是加上關鍵字”native”作為前綴,而且沒有方法體。本地方法的實現(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++實現(xiàn)本地方法,并通過編譯、連接生成動態(tài)鏈接庫。

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

2 技術實現(xiàn)

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

圖1 區(qū)域選擇

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

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

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

static

{ System.loadLibrary("kk"); }

使用VC來編寫本地方法的實現(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); }

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

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

點類:

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é)論

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

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

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

猜你喜歡
區(qū)域方法
永久基本農(nóng)田集中區(qū)域“禁廢”
分割區(qū)域
學習方法
關于四色猜想
分區(qū)域
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
基于嚴重區(qū)域的多PCC點暫降頻次估計
電測與儀表(2015年5期)2015-04-09 11:30:52
主站蜘蛛池模板: 欧美日韩成人在线观看| a毛片在线| 国产精品专区第1页| 欧美一区二区人人喊爽| 97成人在线观看| 亚洲AⅤ永久无码精品毛片| 久久久久久久久18禁秘| 亚洲无码高清一区| 日韩午夜片| 九九香蕉视频| 91在线播放国产| 成人噜噜噜视频在线观看| 亚洲a级毛片| 国产一区二区三区在线观看免费| 亚洲AⅤ波多系列中文字幕| 五月婷婷精品| 亚洲欧美一区二区三区图片 | 在线中文字幕网| 91麻豆精品国产高清在线| 国产丝袜丝视频在线观看| 一级一级一片免费| 97在线公开视频| 精品一区二区三区水蜜桃| 午夜精品区| 国产成人三级| 特级毛片8级毛片免费观看| 高清精品美女在线播放| 91精品国产91久无码网站| 日日噜噜夜夜狠狠视频| 久久这里只有精品2| 伊人久热这里只有精品视频99| 国产高清在线丝袜精品一区| 国产成人a在线观看视频| 日本草草视频在线观看| 欧美日韩精品在线播放| 欧洲高清无码在线| 国产一区二区精品福利| 国产一区二区三区精品久久呦| 波多野结衣一区二区三视频 | 色综合久久88| 欧美 亚洲 日韩 国产| 国产办公室秘书无码精品| 国产小视频免费观看| 亚洲嫩模喷白浆| 欧美区国产区| 九色视频一区| 国产精品久久自在自2021| 国产精品久久久久婷婷五月| 99久久国产综合精品2020| 真实国产乱子伦高清| 看你懂的巨臀中文字幕一区二区 | 亚洲乱亚洲乱妇24p| 97在线国产视频| 天天躁夜夜躁狠狠躁图片| 3D动漫精品啪啪一区二区下载| 中文字幕中文字字幕码一二区| 亚洲第一中文字幕| 日韩欧美国产精品| 亚洲欧洲天堂色AV| 午夜国产精品视频| 呦女亚洲一区精品| 在线精品亚洲国产| 久久伊人操| 无码中文字幕加勒比高清| 99精品福利视频| 亚洲性一区| 国产女人在线视频| 狠狠色丁香婷婷| 亚洲国产成人精品无码区性色| 亚洲三级片在线看| 久久五月天国产自| 成年A级毛片| 波多野衣结在线精品二区| 最新国产网站| 国产三级成人| 91国内视频在线观看| 色综合久久无码网| 性做久久久久久久免费看| 国产一级毛片yw| 国产色网站| 久草视频精品| 91人妻日韩人妻无码专区精品|