這篇文章給大家分享的是有關(guān)html結(jié)合工業(yè)互聯(lián)網(wǎng)實(shí)現(xiàn)智能飛機(jī)控制的方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。
在柳林等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),柳林網(wǎng)站建設(shè)費(fèi)用合理。從互聯(lián)網(wǎng)+的概念一出來,就瞬間吸引了各行各業(yè)的能人志士,想要在這個(gè)領(lǐng)域分上一杯羹?,F(xiàn)在傳統(tǒng)工業(yè)生產(chǎn)行業(yè)運(yùn)用互聯(lián)網(wǎng)+的概念偏多,但是在大眾創(chuàng)業(yè)萬眾創(chuàng)新的背景下,“互聯(lián)網(wǎng)+”涌出了層出不窮的“玩法”,智慧城市、隧道交通、智慧園區(qū)、工業(yè)生產(chǎn),甚至是這次要說的智能飛機(jī)!異地協(xié)同制造的范圍,目前多局限于主機(jī)制造廠之間,發(fā)動(dòng)機(jī)和機(jī)載系統(tǒng)介入得很少?!盎ヂ?lián)網(wǎng)+飛機(jī)”可通過提高各類飛行器的有效監(jiān)控能力、應(yīng)急處置能力來大幅提高航行安全水平?!霸谔岣哌@兩大能力后,像飛機(jī)失聯(lián)這類事件將不再發(fā)生?!碑?dāng)飛機(jī)飛離預(yù)定航線時(shí),地面可以即時(shí)監(jiān)控,甚至在飛機(jī)遭遇惡意操控時(shí),地面也可以接管,而且“互聯(lián)網(wǎng)+飛機(jī)”將對(duì)每架飛機(jī)的各項(xiàng)數(shù)據(jù)了如指掌,有效提高航行的安全。我認(rèn)為,“互聯(lián)網(wǎng)+飛機(jī)”將超出傳統(tǒng)的“互聯(lián)網(wǎng)+飛機(jī)制造”階段,讓互聯(lián)網(wǎng)在飛機(jī)全壽命使用過程中發(fā)威,這可為傳統(tǒng)制造業(yè)轉(zhuǎn)型升級(jí)提供重大機(jī)遇。
代碼部分:
加載飛機(jī)模型
首先,最重要的是我們的飛機(jī)模型,前面有文章寫到過,HT 內(nèi)部封裝了一個(gè)方法 ht.Default.loadObj (https://hightopo.com/guide/gu...)來加載 OBJ 文件:
ht.Default.loadObj('obj/plane.obj', 'obj/plane.mtl', { center: true, r3: [0, -Math.PI/2, 0], // make plane face right s3: [0.15, 0.15, 0.15], // make plane smaller finishFunc: function(modelMap, array, rawS3){ if(modelMap){ modelMap.propeller.r3 = {// propeller 螺旋槳 func: function(data){ return [data.a('angle'), 0, 0]; } }; // 設(shè)置模型的大小為原來的 1 1.2 1.2 倍(相當(dāng)于 x 軸放大了 1 倍,y 軸放大了 1.2 倍,z 軸放大了 1.2 倍) modelMap.propeller.s3 = [1, 1.2, 1.2]; modelMap.propeller.color = 'yellow'; } });
要將 obj 解析后的模型信息綁定到圖元,需先調(diào)用建模手冊(cè)(https://hightopo.com/guide/gu...)中模型注冊(cè)(https://hightopo.com/guide/gu...)章節(jié)介紹的 ht.Default.setShape3dModel(name, model) 函數(shù)進(jìn)行注冊(cè),之后圖元只需將 style 的 shape3d 屬性設(shè)置為注冊(cè)的名稱。當(dāng)然我們現(xiàn)在將這個(gè)方法封裝了一下,采用更簡(jiǎn)便的方法來加載模型,但是還是需要加載的原理:
// models/plane.json { "modelType": "obj", "obj": "obj/plane.obj", "mtl": "obj/plane.mtl"http:// 要是沒有 mtl 文件,則設(shè)置為 "" }
之后通過設(shè)置節(jié)點(diǎn)的 style 的 shape3d 屬性設(shè)置為這個(gè) json:node.s('shape3d', 'models/plane.json')。
注意!不管使用哪種方法來加載模型,mtl 文件中如果有使用貼圖,貼圖的路徑需要是相對(duì)于 obj 文件的路徑。
前面代碼中的 modelMap.propeller 是 OBJ 文件中定義好的 modelMap 對(duì)象中的 propeller 對(duì)象,可以試著打印 modelMap 看看輸出結(jié)果。
加載機(jī)尾指示燈
這個(gè)方法里的 finishFunc(modelMap, array, rawS3) 用于加載后的回調(diào)處理,具體查閱 HT for Web OBJ 手冊(cè)(http://hightopo.com/guide/gui...),我們還添加了一個(gè)在 OBJ 模型中沒有的飛機(jī)尾部的“紅色閃爍指示燈”,這里用到的是組合模型 array(所有材質(zhì)組成的數(shù)組,里面有至少一個(gè)模型),我們?cè)?array中加入一個(gè)新的球模型:
// 添加一個(gè)指示燈的圓形模型 array.push({ shape3d: ht.Default.createSmoothSphereModel(), t3: [-40, 10, 0], s3: [6, 6, 6], color: { func: function(data){ return data.a('light') ? 'red': 'black'; } } });
這里的 shape3d 是 HT 封裝的一個(gè)屬性名,通過 setShape3dModel(name, model) 函數(shù)注冊(cè)的或者是通過 getShape3dModel(name) 函數(shù)返回的注冊(cè)過的 3D 模型,如何注冊(cè) 3D 模型可查閱 HT for Web 建模手冊(cè)(http://hightopo.com/guide/gui...)。
color 屬性名對(duì)應(yīng)了一個(gè)對(duì)象,這邊的定義是這樣的,color 直接通過 data.getAttr('a') 獲取 data.setAttr(‘a(chǎn)’, value) 中的值,這樣做有兩個(gè)好處,一是可以不污染 HT 的常用屬性操作,所以 HT 專門定義了這個(gè) attr 屬性類型,是 HT 預(yù)留給用戶存儲(chǔ)業(yè)務(wù)數(shù)據(jù)的;二是這樣也很方便數(shù)據(jù)綁定,我們可以通過在需要更改屬性的地方調(diào)用 setAttr 方法,非常方便。
接著我們通過 ht.Default.setShape3dModel(name, model) 來將我們剛剛組合好的模型 array 注冊(cè)成我們要的“plane”模型:
ht.Default.setShape3dModel('plane', array);
創(chuàng)建模型節(jié)點(diǎn)
注冊(cè)好模型后肯定是要調(diào)用這個(gè)模型,我們可以通過 shape3d 屬性來調(diào)用這個(gè)模型,并且在這個(gè)模型中自定義上面代碼中出現(xiàn)過的 light 屬性和 angle 屬性:
plane = new ht.Node(); plane.s3(200, 200, 200); plane.s3(rawS3); plane.s({ 'shape3d': 'plane', 'shape3d.scaleable': false, 'wf.visible': true,// 線框是否可見 'wf.color': 'white', 'wf.short': true // 是否顯示封閉的線框,true為不封閉的短線框 }); plane.a({ 'angle': 0, 'light': false });
動(dòng)畫
因?yàn)轱w機(jī)還有螺旋槳、指示燈兩個(gè)功能,我們還得對(duì)這兩個(gè)模型做動(dòng)畫效果,可查閱 HT for Web 動(dòng)畫手冊(cè)(http://hightopo.com/guide/gui...),通過用戶在 form 表單上選擇的結(jié)果來決定飛機(jī)飛行持續(xù)時(shí)間、看飛機(jī)的視角、飛機(jī)沿著“航線”飛行所要旋轉(zhuǎn)的角度、機(jī)尾指示燈的“閃爍”功能等等,最后別忘了飛機(jī)停止飛行時(shí),如果要讓飛機(jī)繼續(xù)飛行,就得回調(diào)這個(gè)動(dòng)畫,并且設(shè)置燈不再閃爍,別忘了要啟動(dòng)動(dòng)畫:
params = { delay: 1500, duration: 20000, easing: function(t){ return (t *= 2) < 1 ? 0.5 * t * t : 0.5 * (1 - (--t) * (t - 2)); }, action: function(v, t){ var length = g3d.getLineLength(polyline), offset = g3d.getLineOffset(polyline, length*v), point = offset.point, px = point.x, py = point.y, pz = point.z, tangent = offset.tangent, tx = tangent.x, ty = tangent.y, tz = tangent.z; plane.p3(px, py, pz); plane.lookAt([px + tx, py + ty, pz + tz], 'right'); var camera = formPane.v('Camera'); if(camera === 'Look At'){ g3d.setCenter(px, py, pz); } else if(camera === 'First Person'){ g3d.setEye(px - tx * 400, py - ty * 400 + 30, pz - tz * 400); g3d.setCenter(px, py, pz); } plane.a('angle', v*Math.PI*120); if(this.duration * t % 1000 > 500){ plane.a('light', false); }else{ plane.a('light', true); } }, finishFunc: function(){ animation = ht.Default.startAnim(params); plane.a('light', false); } }; animation = ht.Default.startAnim(params);
其實(shí)最讓我們好奇的是描繪的路徑跟飛機(jī)本身的飛行并沒有關(guān)系,還有那么多左拐右拐的,要如何做才能做到呢?
繪制飛機(jī)軌道
接下來我們來描繪路徑,首先這個(gè)路徑是由 ht.Polyline 作為基礎(chǔ)來描繪的:
polyline = new ht.Polyline(); polyline.setThickness(2); polyline.s({ 'shape.border.pattern': [16, 16], 'shape.border.color': 'red', 'shape.border.gradient.color': 'yellow', 'shape3d.resolution': 300, '3d.selectable': false }); dataModel.add(polyline);
上面的代碼只是向 datamodel 數(shù)據(jù)模型中添加了一個(gè) polyline 管線而已,不會(huì)顯示任何東西,要顯示“航道”首先就要設(shè)置航道所在的點(diǎn),我們先設(shè)置航道的初始點(diǎn):
points = [{ x: 0, y: 0, e: 0 }]; segments = [1];
這個(gè) points 和 segments 是 HT for Web Shape 手冊(cè)(http://hightopo.com/guide/gui...)中定義的,points 是 ht.List 類型數(shù)組的定點(diǎn)信息,頂點(diǎn)為 { x: 100, y: 200 } 格式的對(duì)象;segments 是 ht.List 類型的線段數(shù)組信息,代表 points 數(shù)組中的頂點(diǎn)按數(shù)組順序的連接方式。
圖中“航道”左側(cè)的多個(gè)圓形軌道也是通過設(shè)置 points 和 segments 來設(shè)置的:
for(var k=0; k接下來幾個(gè)拐點(diǎn)也是這種方法來實(shí)現(xiàn)的,這里就不贅述了,如果你還沒看手冊(cè)的話,這里標(biāo)明一點(diǎn),segments 只能取值 1~5,1 代表一個(gè)新路徑的起點(diǎn);2 代表從上次最后點(diǎn)連接到該點(diǎn);3 占用兩個(gè)點(diǎn)信息,第一個(gè)點(diǎn)作為曲線控制點(diǎn),第二個(gè)點(diǎn)作為曲線結(jié)束點(diǎn);4 占用3個(gè)點(diǎn)信息,第一和第二個(gè)點(diǎn)作為曲線控制點(diǎn),第三個(gè)點(diǎn)作為曲線結(jié)束點(diǎn);5 不占用點(diǎn)信息,代表本次繪制路徑結(jié)束,并閉合到路徑的起始點(diǎn):
points.push({ x: cx+radius, y: 0, e: height/2 }); points.push({ x: 0, y: 0, e: height/2 }); segments.push(3); points.push({ x: radius, y: -radius, e: height/2*0.7 }); points.push({ x: radius*2, y: radius, e: height/2*0.3 }); points.push({ x: radius*3, y: 0, e: 0 }); segments.push(4); points.push({ x: 0, y: 0, e: 0 }); segments.push(2);我們已經(jīng)把路徑上的點(diǎn)都添加進(jìn)“航道”中了,接下來要把點(diǎn)都設(shè)置到管道上去才會(huì)顯示在界面上:
polyline.setPoints(points); polyline.setSegments(segments);飛機(jī)跑道
“跑道”就比較簡(jiǎn)單了,只是一個(gè) Node 節(jié)點(diǎn)然后設(shè)置基礎(chǔ)效果而已,沒什么特別的:
runway = new ht.Node(); runway.s3(-cx+radius*3, 1, 200); runway.p3(cx+runway.getWidth()/2, -22, 0); runway.s({ 'all.color': '#FAFAFA', 'all.transparent': true, 'all.reverse.cull': true, 'all.opacity': 0.8, '3d.selectable': false }); dataModel.add(runway);最后,在界面上添加一個(gè) formPane 表單面板,定義好之后可以直接添加到 body 上,這樣就不會(huì)跟 graph4dView 有顯示的聯(lián)系了。
表單面板
formPane 可以用 formPane.addRow(https://hightopo.com/guide/gu...)方法動(dòng)態(tài)添加行,這個(gè)方法中可以直接對(duì)動(dòng)態(tài)變化的數(shù)據(jù)進(jìn)行交互,例如本例中的是否有動(dòng)畫 Animation,我們利用 checkBox 來記錄選中或者非選中的狀態(tài):{ checkBox: { label: 'Animation', selected: true, onValueChanged: function(){ if(this.isSelected()){ animation.resume(); }else{ animation.pause(); } } } }也可以通過設(shè)置“id”來記錄動(dòng)態(tài)改變的值,然后 formPane 就會(huì)通過調(diào)用 formPane.v(id) 來獲取當(dāng)前值。
最后
工業(yè)互聯(lián)網(wǎng)(Industrial Internet)的概念最早由通用電氣(GE)在 2012 年提出,即讓互聯(lián)網(wǎng)進(jìn)入產(chǎn)業(yè)鏈的上游,從根本上革新產(chǎn)業(yè)。根據(jù)飛常準(zhǔn)的數(shù)據(jù)顯示,美國已有 78% 的航班提供機(jī)上互聯(lián)服務(wù)。在航天航空領(lǐng)域,工業(yè)互聯(lián)網(wǎng)會(huì)打破軟件、硬件和人員之間的信息壁壘,依靠大數(shù)據(jù)的分析,讓飛機(jī)建立自己的聲音,表達(dá)給飛行員和維修人員飛行員,具體飛行狀況如何或者哪里需要維修。工業(yè)互聯(lián)網(wǎng)技術(shù)的深入應(yīng)用,正在改變著民航飛機(jī)的使用效率和制造成本。
感謝各位的閱讀!關(guān)于html結(jié)合工業(yè)互聯(lián)網(wǎng)實(shí)現(xiàn)智能飛機(jī)控制的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享文章:html結(jié)合工業(yè)互聯(lián)網(wǎng)實(shí)現(xiàn)智能飛機(jī)控制的方法-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://weahome.cn/article/dhcdph.html