91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Cesium怎么實現簡單的箭頭效果

發布時間:2021-12-30 14:38:53 來源:億速云 閱讀:540 作者:iii 欄目:大數據

本篇內容介紹了“Cesium怎么實現簡單的箭頭效果”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在mapbox-gl上,可以借助turf.js實現簡單箭頭的畫法,Cesium調用本身的api,同樣能夠實現箭頭的畫法。  
實現的方式,也是先計算兩個點相對于北向的角度,再根據角度計算一定距離的點坐標,從而達到實現箭頭的效果。  
Cesium計算相對于北向的角度,是根據矩陣來進行計算的。  
具體的實現代碼函數:

/**

 * 計算a點和b點的角度(偏轉角)

 * @param lng_a  a點經度

 * @param lat_a  a點維度

 * @param lng_b  b點經度

 * @param lat_b  b點維度

 * @returns 角度

 */

function courseAngle(lng_a, lat_a, lng_b, lat_b) {

//以a點為原點建立局部坐標系(東方向為x軸,北方向為y軸,垂直于地面為z軸),得到一個局部坐標到世界坐標轉換的變換矩陣

var localToWorld_Matrix = 

Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(lng_a, lat_a));

//求世界坐標到局部坐標的變換矩陣

var worldToLocal_Matrix = 

Cesium.Matrix4.inverse(localToWorld_Matrix, new Cesium.Matrix4());   

//a點在局部坐標的位置,其實就是局部坐標原點

  var localPosition_A = 

Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix,

new Cesium.Cartesian3.fromDegrees(lng_a, lat_a),

new Cesium.Cartesian3());

 //B點在以A點為原點的局部的坐標位置

var localPosition_B = 

Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix,

new Cesium.Cartesian3.fromDegrees(lng_b, lat_b),

new Cesium.Cartesian3());

  //弧度

var angle =

Math.atan2((localPosition_B.y-localPosition_A.y), 

(localPosition_B.x-localPosition_A.x))

 //角度

 var theta = angle*(180/Math.PI);

 if (theta < 0) {

     theta = theta + 360;

  }

return theta;

}

不過,上邊計算的是對應于x軸的角度,也就是相對于東邊方向的角度,換算成相對偏北的角度,需要減去90度。  
已知點,根據角度和距離,計算另一個點,同樣是參照官方的矩陣計算方式。
//_ca_coord是Cesium  Cartesian3 坐標
//local_coord是相對于當前坐標的偏移米數
//返回值可以是  Carte  sian3 坐標,也可以是經緯度坐標

  function ComputeLngLat(_ca_coord, local_coord) {

     //同樣是建立局部坐標系

    const _localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(_ca_coord);

//根據偏移的三個方向距離,計算新的坐標點

    const _new_ca = Cesium.Matrix4.multiplyByPoint(_localToWorld_Ma trix, Cesium.Cartesian3.fromElements(local_coord[1], local_coord[0], local_coord[2]), new Cesium.Cartesian3());

    //返回不同的坐標類型,自由控制

    return _new_ca;

    return Cesium.Cartographic.fromCartesian(_new_ca);

     }

計算出兩個點的北向偏移角,根據箭頭所要偏移的角度和米數,通過三角函數sin和cos,計算出x方向和y方向的偏移距離,調用函數,就能計算出新的點位置,將點連接成線,就能實現簡單箭頭的效果。    

“Cesium怎么實現簡單的箭頭效果”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汤阴县| 当涂县| 电白县| 昌吉市| 凌海市| 黄冈市| 德惠市| 乡宁县| 射洪县| 贵港市| 饶阳县| 三江| 重庆市| 军事| 惠来县| 新河县| 广南县| 马鞍山市| 英吉沙县| 上杭县| 绥德县| 顺义区| 松溪县| 璧山县| 尼玛县| 嘉峪关市| 宁安市| 万年县| 雅安市| 大姚县| 柳州市| 宜春市| 镇江市| 绥棱县| 和龙市| 平定县| 蒲城县| 阳信县| 鹿泉市| 宁乡县| 平谷区|