国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

沈陽網(wǎng)站搜索引擎優(yōu)化google推廣教程

沈陽網(wǎng)站搜索引擎優(yōu)化,google推廣教程,做冷飲的網(wǎng)站,網(wǎng)站建設要那些東西文章目錄 一、Matplot3D for JAVA V4.0 概述 二、什么是處理器 三、DataGridProcessor處理器 四、基本使用方法 五、舉個栗子:繪制高程地形圖 新版本介紹 v5.0 文章鏈接 Matplot3D for Java V5.0:一個純JAVA開發(fā)的數(shù)學科學數(shù)據(jù)可視化組件&#xff…

文章目錄

一、Matplot3D for JAVA V4.0 概述

二、什么是處理器

三、DataGridProcessor處理器

四、基本使用方法

五、舉個栗子:繪制高程地形圖



新版本介紹 v5.0? 文章鏈接

Matplot3D for Java V5.0:一個純JAVA開發(fā)的數(shù)學科學數(shù)據(jù)可視化組件,JAVA 三維繪圖(可視化圖表)組件,類似matplotlib-CSDN博客文章瀏覽閱讀707次,點贊8次,收藏9次。在數(shù)據(jù)科學和工程領域,數(shù)據(jù)可視化是理解和交流復雜信息的關鍵工具。如果您是一位Java開發(fā)者,尋找一個強大的、本地化的三維圖形繪圖庫,那么Matplot3D for JAVA(V5.0)值得你關注。該組件旨在為Java開發(fā)者提供類似于Python中Matplotlib的三維繪圖功能,讓Java也能輕松繪制出令人印象深刻的3D圖形圖表。https://blog.csdn.net/tanling8334/article/details/137752605?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137752605%22%2C%22source%22%3A%22tanling8334%22%7D

?

一、Matplot3D for JAVA V4.0 概述

? ? Matplot3D for JAVA? 是一個基于JAVA SE 1.8環(huán)境開發(fā)的數(shù)學科學數(shù)據(jù)三維可視化組件。 這是一個純JAVA實現(xiàn)的類似matplotlib可視化三維庫(內含純java實現(xiàn)的3維軟引擎),封裝為一個jar包,jar文件大小只有200多KB,直接引用即可。無需再安裝和配置第三方庫或者環(huán)境,無需依賴OpenGL、DriectX、JAVA 3D或JAVAFX等等。

下載地址?

碼云:????????https://gitee.com/tanling8334/Matplot3D-for-Java

Github:? ? https://github.com/tanling8334/Matplot3D-for-Java


二、什么是處理器

? ? Matplot3D for JAVA 的處理器(Processor)是一類對象,它們的作用是將數(shù)據(jù)轉換成對應圖表的三維模型,負責數(shù)據(jù)處理和建模,無需使用者直接編寫具體模型的代碼,只需要將數(shù)據(jù)加入到處理器中,再通過Matplot3D4JMgr對象將圖表直接在繪制到界面上或者輸出為圖像文件即可。一個Matplot3D4JMgr對象可以“持有”多個不同類型的處理器對象。


三、DataGridProcessor處理器

? ? DataGridProcessor是數(shù)據(jù)網(wǎng)格處理器,可以繪制連續(xù)的曲面。數(shù)據(jù)網(wǎng)格是指一個在x,y方向都均勻排列的點陣列。使用一個Double[][]表示數(shù)據(jù),數(shù)組中的值為z(高度)值。x,y方向由于均勻分布,在指定了各自的取值范圍后即可換算為空間坐標的x,y坐標。需要注意的是Double[][]中存放的為數(shù)據(jù),和顯示的分段數(shù)不一定相等(譬如說數(shù)據(jù)數(shù)組是100*100的,但3維曲面模型的分段數(shù)可以使90*80)。


四、基本使用方法

DataGridProcessor的編程模式如下:

DataGridProcessor processor = new DataGridProcessor();  //創(chuàng)建一個數(shù)據(jù)處理器Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);	//創(chuàng)建圖形管理器Double[][] datas=new Double[20][20]; //數(shù)據(jù)陣列//......準備數(shù)據(jù)//向pricessor對象加入數(shù)據(jù)
processor.addData(datas, "Name", new Range(0, 300), new Range(0, 300), 100, 100, cs, 1f);mgr.show();

? ? 其中datas表示用戶的數(shù)據(jù),上面的代碼中并沒有數(shù)據(jù)。?現(xiàn)生成一些演示數(shù)據(jù)如下:

    DataGridProcessor processor = new DataGridProcessor();Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);		//----------以下生成一些演示數(shù)據(jù)Double[][] datas=new Double[20][20];Random random=new Random();for(int i=0;i<datas.length;i++) {for(int j=0;j<datas[0].length;j++) {if(i+j<20)datas[i][j]=(double)i+j+random.nextDouble();else datas[i][j]=40d-i-j-random.nextDouble();}}processor.setClose3DObject(true); //設置是否是封閉三維對象mgr.setScaleZ(1.2); //z方向伸拉至原始的1.2倍mgr.setTitle("Demo 數(shù)據(jù)陣列");processor.setShowGrid(false);//不顯示輔助網(wǎng)格線//創(chuàng)建一個顏色風格ColorStyle cs = new TopBottomColorStyle(ColorStyle.DEFAULT_COLORS_ARRAY);processor.addData(datas, "", new Range(0, 100), new Range(100, 200), 20, 20, cs, 1f);mgr.show();

? ? 運行效果如下:

?

主要方法介紹:

public void setClose3DObject(boolean flag)

設置是否封閉三維對象,如果為false則只顯示數(shù)據(jù)曲面,如果為true則將曲面、和自適應的水平的矩形平面和四周的垂直面將三維圖形圍蔽。

public?void addData(Double[][] data, String name, Color color, Range rangeX, Range rangeY, int ?stepX, int stepY, float alpha)

加入一組數(shù)據(jù)陣列數(shù)據(jù),并指定x,y范圍,顯示分段,顏色和不透明度。參數(shù)說明如下:

1、data:數(shù)據(jù)陣列二維數(shù)組,第一個下標代表X方向,第二個下標代表Y方向;

2、name:名字;

3、color:顏色;

4、rangeX:數(shù)據(jù)在X方向的分布范圍;

5、rangeY:數(shù)據(jù)在Y方向的分布范圍;

6、stepX :X方向的顯示分段;

7、stepY:Y方向的顯示分段;

8、alpha:不透明度(0為完全透明,1.0為完全不透明)。

public?void addData(Double[][] data, String name, Range rangeX, Range rangeY, int stepX, int stepY, ColorStyle cs, float alpha)

此方法與前一個方法類似,只是使用ColorStyle 最為參填充而不是用一種純色填充。注意參數(shù)的順序是和上面的方法不一樣的。


五、舉個栗子:繪制高程地形圖

? ? ?現(xiàn)在我們來寫一個稍微高級一點點的栗子:繪制高程地形圖。就像下面這樣:

?

? ? ?是不是看起來還挺酷的,實際上DataGridProcessord的使用方法和上面簡單的栗子并沒有多少差別,差別在于數(shù)據(jù)。同時根據(jù)數(shù)據(jù)的分布密度設置合理的分段數(shù)進行建模和繪制。

? ? 需要特別指出的是,由于這是一個JAVA純軟件實現(xiàn)的三維引擎,完全依靠JVM和CPU運算以及靠內存存儲數(shù)據(jù),當模型數(shù)據(jù)過多時會占用較多內存,“刷新時”也會占用較多CPU時間。所以根據(jù)自己電腦的實際配置和性能來決定模型的精細度。根據(jù)我的4年前的破電腦的使用經(jīng)驗,如果是需要實時刷新我覺得最好把模型的片面數(shù)控制在10W個以內,例如分段數(shù)設定為300*300時,模型的片面數(shù)就會超過9W個。大家可以根據(jù)自己電腦的實際配置測試一下在可接受的刷新效率下的極限精細度。

? ? 關于性能方面的底層問題,我還在還在持續(xù)改進中,看看使用CPU計算時JAVA的極限能達到什么程度。

? ? 言歸正傳,地形數(shù)據(jù)怎么生成。首先從互聯(lián)網(wǎng)上找到高程數(shù)據(jù),高程數(shù)據(jù)一般都是測繪衛(wèi)星測繪獲得的,有多種格式,大家有興趣可以研究研究。我是從下面這個網(wǎng)站下載高程數(shù)據(jù)的:

http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm

?

? ? 選擇某一個方格可以下載那一區(qū)域的高程數(shù)據(jù),下載后解壓可以得到一堆后綴是 .hgt的文件。文件是以一個方格區(qū)域的右上角的經(jīng)緯度命名的,每個文件代表的方格跨度分別是經(jīng)度的1度和緯度的1度。例如N08E036.hgt文件包含的就是北緯8度到北緯9度,東經(jīng)36度到東經(jīng)37度這一區(qū)域的地形高程數(shù)據(jù)。每個文件的大小是一致的,共包含1442401個采樣點的高程數(shù)據(jù),可以看到每個文件的大小是2884802字節(jié),就是說每個采樣點數(shù)據(jù)占用了兩個字節(jié)。

?

? ? 同時可以按照地球的半徑換算:R*\pi /(180*1201)?,結果大約是90m,也就是說這些hgt文件的數(shù)據(jù)精度是90米。每一個文件涵蓋的區(qū)域長寬大概是108km,而我們知道地球最高的海拔也只有8800多米,所以整塊繪制體現(xiàn)不出地形高度起伏,可以只提取其中的一個子區(qū)域繪制。

? ? 例如提取文件“?N27E086.hgt ” 文件其中300*300個點表示的區(qū)域進行繪制。這個區(qū)域位于喜馬拉雅山脈,因此地形起伏會比較明顯。??

? ??hgt文件數(shù)據(jù)提取代碼如下:

/**
* @param fileName 文件名
* @param offsetU  提取區(qū)域右上角的經(jīng)度偏移量
* @param offsetV  提取區(qū)域右上角的維度偏移量
* @param countU   經(jīng)度提取點數(shù)量
* @param countV   維度提取點數(shù)量
* @return         高程數(shù)據(jù)數(shù)組
*/
Double[][] readHgtFile(String fileName,int offsetU,int offsetV,int countU,int countV) throws Exception{File file = new File(fileName);DataInputStream dio = new DataInputStream(new FileInputStream(file));int x=0,y=0;Double[][] datas=new Double[countU][countV];byte[] buf=new byte[2402];for(int i=0;i<1201;i++) {dio.read(buf);if(i<offsetU||i>=offsetU+countU)continue;for(int k=0;k<buf.length;k+=2) {if(k/2<offsetV||k/2>=offsetV+countV)continue;datas[x][y]=(double)((buf[k] << 8) | (buf[k+1] & 0xff));y++;}y=0;x++;}dio.close();return datas;
}

? ? 接下來是主程序,因為我們需要取縱橫300個點,按照點間90米計算,跨度大約為27公里,因此繪圖范圍的跨度應該設置為27000,分段數(shù)可隨意,這里設置為270,使片面數(shù)不至于很大。主程序如下:

	public static void main(String[] args) throws Exception {final Double[][] datas = readHgtFile("./demo_data/N27E086.hgt",139,100,301,300);DataGridProcessor processor = new DataGridProcessor();Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);mgr.setTitle("高程地形");mgr.setShowReferencePlanes(false); //不顯示坐標系processor.setShowGrid(false); //不顯示網(wǎng)格線processor.addData(datas, "",Color.LIGHT_GRAY, new Range(0, 27000), new Range(0, 27000), 270, 270, 1f);processor.setClose3DObject(true);mgr.show();}

執(zhí)行程序顯示如圖:

?

? ? 是不是已經(jīng)有點意思了。但是顏色只有灰色,我們希望可以根據(jù)高度顯示不同的顏色,就是高度用顏色也能體現(xiàn)出來。 還有高光感看起來感覺有一點像金屬表面。那么就做一下細節(jié)調整。用顏色數(shù)組創(chuàng)建ColorStyle對象,并在添加數(shù)據(jù)時設置,同時關閉高光渲染。調整代碼調整如下:?

ColorStyle cs = new TopBottomColorStyle(new Color[] {Color.BLUE,Color.GREEN,Color.YELLOW,Color.RED.brighter(),Color.RED.darker()});processor.addData(datas, "", new Range(0, 27000), new Range(0, 27000), 270, 270, cs, 1f);processor.setHighlight(false);

? ? 注意使用ColorStyle的 addData 方法的參數(shù)順序和使用Color作為參數(shù)的方法是不一樣的,效果如下:

?

?關閉高光渲染時效果如下:

?

? ? 是不是挺酷

http://m.aloenet.com.cn/news/37624.html

相關文章:

  • 網(wǎng)頁版視頻網(wǎng)站建設需要多少錢百度sem推廣具體做什么
  • kol合作推廣seo外鏈是什么
  • 自己創(chuàng)業(yè)做原公司一樣的網(wǎng)站網(wǎng)站seo設計
  • 公司做網(wǎng)站的步驟廣州seo關鍵字推廣
  • 做韋恩圖的網(wǎng)站怎么樣推廣自己的公司
  • wordpress 添加導航菜單成都seo招聘
  • 網(wǎng)站域名有什么用計算機培訓
  • 大學新校區(qū)建設網(wǎng)站網(wǎng)站seo重慶
  • 網(wǎng)站推廣資訊上海百度競價托管
  • 中國大型建筑公司有哪些seo西安
  • 全國公安網(wǎng)站備案應用寶aso優(yōu)化
  • 班級建設網(wǎng)站設計方案搜索引擎優(yōu)化到底是優(yōu)化什么
  • 陜西省建設廳小紅書關鍵詞排名優(yōu)化
  • java 網(wǎng)站設計都有什么推廣平臺
  • 香港網(wǎng)站代理seo優(yōu)化方案
  • 南昌做網(wǎng)站市場報價刷seo關鍵詞排名軟件
  • 做網(wǎng)站設計累嗎網(wǎng)絡營銷策劃步驟
  • css優(yōu)秀網(wǎng)站百度平臺客服
  • 網(wǎng)站制作公司官網(wǎng)南京長沙百度
  • 淘客做網(wǎng)站百度關鍵詞優(yōu)化專家
  • 找哪個網(wǎng)站做摩配百度投訴電話人工服務總部
  • 羅湖建設網(wǎng)站志鴻優(yōu)化設計答案網(wǎng)
  • wordpress圖片展示主題yousucai寧波網(wǎng)站推廣優(yōu)化外包
  • 做網(wǎng)站工商局要不要備案呢色盲測試圖 考駕照
  • cname解析對網(wǎng)站影響seo課程心得體會
  • 商務網(wǎng)站制作語言基礎seo平臺怎么樣
  • 烏蘭察布做網(wǎng)站的公司百度推廣是怎么做的
  • 求幾個夸克沒封的a站2023惠州seo排名外包
  • 設計網(wǎng)站頁面好處百度瀏覽器下載
  • 自己有服務器和域名怎么做網(wǎng)站谷歌seo培訓