Cesium常見設置視角所用到函數

?1.左鍵拾取經緯度坐標

const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas)// 監聽鼠標點擊事件handler.setInputAction(function (click) {// 使用pick函數獲取點擊位置的實際位置var cartesian = viewer.scene.pickPosition(click.position);if (Cesium.defined(cartesian)) {// 將笛卡爾坐標轉換為經緯度坐標var cartographic = Cesium.Cartographic.fromCartesian(cartesian);var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(6);var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(6);var heightString = cartographic.height.toFixed(2);console.log('經度:' + longitudeString + ',緯度:' + latitudeString + ',高度:' + heightString)}// 使用Scene.pick來獲取3D Tiles的實際高度var pickedObject = viewer.scene.pick(click.position);if (Cesium.defined(pickedObject)) {// 獲取到3D Tiles的高度const cartographic = Cesium.Cartographic.fromCartesian(cartesian);const height = cartographic.height;const lon=Cesium.Math.toDegrees(cartographic.longitude).toFixed(6);const lat =Cesium.Math.toDegrees(cartographic.latitude).toFixed(6);console.log('點擊位置的經度是: ' + lon);console.log('點擊位置的緯度是: ' + lat);console.log('點擊位置的高度是: ' + height);}}, Cesium.ScreenSpaceEventType.LEFT_CLICK)

2.獲取當前視角heading\pitch\roll?

function getPostion() {const camera = viewer.scene.cameraconst cartographic = Cesium.Cartographic.fromCartesian(camera.position)const x = Cesium.Math.toDegrees(cartographic.longitude)const y = Cesium.Math.toDegrees(cartographic.latitude)const z = cartographic.heightlet pt = Cesium.Cartographic.fromDegrees(x, y, z);let ellipsoid = viewer.scene.globe.ellipsoid;let cartesian3 = ellipsoid.cartographicToCartesian(pt);let objinfo = {"經度": x,"維度": y,"高度": z,"x": cartesian3.x,"y": cartesian3.y,"z": cartesian3.z,"heading": camera.heading,"pitch": camera.pitch,"roll": camera.roll}console.log(objinfo)}

3.設置視角至指定位置(相機)

  • setView方法:用于設置相機的位置、朝向和視角。可以一次性設置相機的目標位置(destination)和朝向(orientation
  • flyTo方法:與setView類似,但它是平滑地飛到指定位置,可以設置飛行時間(duration)和完成后的回調函數。
  • lookAt方法:使相機對準指定的位置或實體,但不改變相機的當前高度。它也可以接受一個orientation參數來設置相機的朝向。
  • zoomTo()方法的基本形式接受一個目標參數(如實體、數據源等)和一個可選的HeadingPitchRange對象,用于指定相機的姿態。目標參數可以是EntityEntity[](實體數組)、EntityCollectionDataSource等。
//flyto()
viewer.camera.flyTo({  destination: position,  orientation: {  heading: Cesium.Math.toRadians(0.0), // 正北  pitch: Cesium.Math.toRadians(-10.0), // 稍微向下傾斜以更好地觀察地面  roll: 0.0  },  duration: 5000  
});//zoomtTo()var headingPitchRange = new Cesium.HeadingPitchRange(heading, pitch, range);  
viewer.zoomTo(entity, headingPitchRange);//setViewer()
viewer.camera.setView({  destination: Cesium.Cartesian3.fromDegrees(lon, lat, height), // 相機目標位置  orientation: { // 相機朝向  heading: Cesium.Math.toRadians(heading), // 偏航角  pitch: Cesium.Math.toRadians(pitch), // 俯仰角  roll: Cesium.Math.toRadians(roll) // 翻滾角  }  
});
//lookAt()
var target = Cesium.Cartesian3.fromDegrees(lon, lat, height);  
viewer.camera.lookAt(target, new Cesium.HeadingPitchRange(heading, pitch, range));

3.設置視角至指定位置(實體)

  • 如果你正在添加一個實體(如模型、點、線等)到Cesium中,并且想要設置它的方向(即視角),你可以通過設置該實體的orientation屬性來實現。這通常涉及到使用四元數(Quaternion)來表示旋轉,但Cesium也提供了HeadingPitchRoll類來簡化這個過程。
//orientation屬性
var position = Cesium.Cartesian3.fromDegrees(lon, lat, height);  
var entity = viewer.entities.add({  position: position,  model: {  uri: 'path/to/model.gltf',  scale: 1.0  },  orientation: Cesium.Transforms.headingPitchRollQuaternion(position, new Cesium.HeadingPitchRoll(heading, pitch, roll))  
});

Cesium中的四元數(Quaternion)是一種用于表示三維空間中旋轉的數學工具,它由四個分量組成,通常表示為(w, x, y, z),其中w是實部,x、y、z是虛部。在Cesium中,四元數主要用于描述物體的旋轉和姿態,具有精確、高效和穩定的特點。以下是對Cesium中四元數的詳細解釋:

一、四元數的基本概念

  • 組成:四元數由一個實部和三個虛部組成,表示為(w, x, y, z)。
  • 旋轉表示:在Cesium中,四元數常用于表示物體的旋轉。通過四元數,可以精確地描述物體在三維空間中的旋轉,且相比歐拉角,四元數沒有萬向鎖問題,能夠避免由于旋轉順序引起的計算錯誤。

二、四元數的應用

  1. 旋轉表示
    • 在Cesium中,通過四元數可以精確地描述物體在三維空間中的旋轉方向和角度。
    • 使用Transforms.headingPitchRollQuaternion(position, hpr)等方法,可以根據物體的位置(position)和歐拉角(hpr,包括航向heading、俯仰pitch、橫滾roll)來計算朝向四元數。
  2. 插值計算
    • 四元數可以用于實現旋轉的平滑插值計算。通過對兩個四元數進行插值運算,可以實現物體在旋轉過程中的平滑過渡,提升視覺效果和用戶體驗。
  3. 姿態控制
    • 在飛行器模擬、虛擬現實和游戲開發等領域,四元數常用于控制物體的姿態。通過調整四元數的參數,可以精確地控制物體的旋轉和姿態,使其符合預期的運動軌跡和角度變化。
  4. 坐標變換
    • 在Cesium中,四元數也常用于實現坐標系之間的變換。通過四元數的乘法運算,可以方便地實現不同坐標系之間的旋轉變換,從而實現物體在不同坐標系下的準確定位和旋轉。

三、四元數的計算與轉換

  • 從歐拉角到四元數:可以使用Cesium提供的Transforms.headingPitchRollQuaternion等方法,根據物體的歐拉角和位置來計算朝向四元數。
  • 從四元數到歐拉角:雖然Cesium直接提供了從歐拉角到四元數的轉換方法,但從四元數反推歐拉角可能需要手動計算或使用特定的函數庫。
  • 四元數的乘法和歸一化:在進行四元數運算時,需要注意四元數的乘法和歸一化操作,以確保旋轉的正確性和穩定性。

四、結論

Cesium中的四元數作為一種用于描述旋轉的數學工具,具有廣泛的應用價值。掌握四元數在Cesium中的應用,對于開發基于Cesium的三維應用具有重要意義。通過合理使用四元數,可以精確地描述和控制物體的旋轉、姿態和坐標變換,提升三維場景中物體運動的真實感和視覺效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39987.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39987.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39987.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【LeetCode】十二、遞歸:斐波那契 + 反轉鏈表

文章目錄 1、遞歸2、leetcode509:斐波那契數列3、leetcode206:反轉鏈表4、leetcode344:反轉字符串 1、遞歸 函數自己調用自己 遞歸的4個點: 遞歸的例子:給一個數n,在斐波那契數列中,找到n對應的…

科研與英文學術論文寫作指南——于靜老師課程

看到了一個特別棒的科研與英文學術論文寫作指南,理論框架實例。主講人是中科院信息工程研究所的于靜老師。推薦理由:寫論文和讀論文或者講論文是完全不一樣的,即使現在還沒有發過論文,但是通過于老師的課程,會給后續再…

LSTM水質預測模型實踐

0 引言 隨著水質自動站的普及,監測頻次越來越高,自動監測越來越準確。 水質站點增多,連續的水質監測數據,給水質預測提供更多的訓練基礎。 長短時記憶網絡(LSTM)適用于多變量、連續、自相關的數據預測。 人工神經網絡模型特點為的…

使用requests爬取拉勾網python職位數據

爬蟲目的 本文是想通過爬取拉勾網Python相關崗位數據,簡單梳理Requests和xpath的使用方法。 代碼部分并沒有做封裝,數據請求也比較簡單,所以該項目只是為了熟悉requests爬蟲的基本原理,無法用于穩定的爬蟲項目。 爬蟲工具 這次…

LVS 負載均衡群集

一:LVS群集應用基礎 1.1:概述 1.群集的類型 無論是哪種群集, 都至少包括兩臺節點服務器, 而對外表現為一個整體, 只提供一個訪問入口。根據群集所針對的目標差異, 可分為以下三種類型。 負載均衡群集&a…

使用U盤重裝系統

目錄 一、 制作啟動盤 1. 準備一個U盤和一臺電腦 2. 下載win10安裝包 二、安裝操作系統 1. 插入系統安裝盤 2. 通過進入BIOS界面進入到我們自己制作的啟動盤上 三、安裝成功后進行常規設置 一、 制作啟動盤 1. 準備一個U盤和一臺電腦 注意:提前備份好U盤內的…

jQuery Tooltip 插件使用教程

jQuery Tooltip 插件使用教程 引言 jQuery Tooltip 插件是 jQuery UI 套件的一部分,它為網頁元素添加了交互式的提示框功能。通過這個插件,開發者可以輕松地為鏈接、按鈕、圖片等元素添加自定義的提示信息,從而增強用戶的交互體驗。本文將詳細介紹如何使用 jQuery Tooltip…

JDK1.8下載、安裝與配置完整圖文2024最新教程

一、報錯 運行Pycharm時,報錯No JVM installation found. Please install a JDK.If you already have a JDK installed, define a JAVA_HOME variable in Computer >System Properties > System Settings > Environment Variables. 首先可以檢查是否已安裝…

【C語言】qsort()函數詳解:能給萬物排序的神奇函數

🦄個人主頁:修修修也 🎏所屬專欄:C語言 ??操作環境:Visual Studio 2022 目錄 一.qsort()函數的基本信息及功能 二.常見的排序算法及冒泡排序 三.逐一解讀qsort()函數的參數及其原理 1.void* base 2.size_t num 3.size_t size 4.int (*compar)(c…

2024西安國際儲能產業博覽會將于12月5日開幕!

2024西部國際儲能產業博覽會 同期舉辦:2024西部國際氫能源及燃料電池產業博覽會 2024年12月5-7日 西安國際會展中心 規劃展會規模: 50,000 ㎡ 450 60000人次 20場 展區面積 預邀展商 專業觀眾 行業…

節水增效,蜂窩物聯智能灌溉助力農業升級!

智能灌溉的優勢主要體現在以下幾個方面: 1. 提高效率:智能灌溉可以根據作物生長的不同階段和環境條件自動調整灌溉時間和水量,減少人工干預的頻率和時間,提高了灌溉效率。 2. 節約水資源:智能灌溉可以根據土壤濕度和…

Python爬蟲實戰案例——王者榮耀皮膚抓取

大家好,我是你們的老朋友——南楓,今天我們一起來學習一下該如何抓取大家經常玩的游戲——王者榮耀里面的所有英雄的皮膚。 老規矩,直接上代碼: 導入我們需要使用到的,也是唯一用到的庫: 我們要抓取皮膚其…

網絡物理隔離

網絡物理隔離是網絡安全領域中的一種基本策略,其核心目的是通過物理方式將網絡或網絡設備分隔開來,以確保數據安全、降低風險并提升系統的整體安全性。網絡物理隔離不僅防止了未經授權的訪問,也顯著降低了來自外部或內部威脅的風險。以下是網…

每天一個數據分析題(四百)- 一元線性回歸模型

評價一元線性回歸模型擬合程度時,主要根據( )的數值 A. 相關系數 B. R2 C. SSE D. SSR 數據分析認證考試介紹:點擊進入 題目來源于CDA模擬題庫 點擊此處獲取答案 數據分析專項練習題庫 內容涵蓋Python,SQL&…

大陸ARS548使用記錄

一、Windows連接上位機 雷達是在深圳路達買的,商家給的資料中首先讓配置網口,但我在使用過程中一直出現無法連接上位機的情況。接下來說說我的見解和理解。 1.1遇到的問題 按要求配置好端口后上位機無連接不到雷達,但wireshark可以正常抓到數…

PyPDF2拆分PDF文件的高級應用:指定拆分方式

本文目錄 前言一、拆分方式選擇1、代碼講解2、實現效果圖3、完整代碼前言 前兩篇文章,分別講解了將使用PyPDF2將PDF文檔分割成為單個頁面、在分割PDF文檔時指定只分割出指定頁面,如果你還沒有看過,然后有需要的話,可以去看一下,我把文章鏈接貼到這里: PyPDF2拆分PDF文件…

Nuxt3 的生命周期和鉤子函數(九)

title: Nuxt3 的生命周期和鉤子函數(九) date: 2024/7/3 updated: 2024/7/3 author: cmdragon excerpt: 摘要:本文介紹了Nuxt3中與Vite相關的五個生命周期鉤子,包括vite:extend、vite:extendConfig、vite:configResolved、vite…

CVE-2024-6387漏洞預警:盡快升級OpenSSH

OpenSSH維護者發布了安全更新,其中包含一個嚴重的安全漏洞,該漏洞可能導致在基于glibc的Linux系統中使用root權限執行未經身份驗證的遠程代碼。該漏洞的代號為regreSSHion,CVE標識符為CVE-2024-6387。它駐留在OpenSSH服務器組件(也…

雙階段目標檢測算法:精確與效率的博弈

雙階段目標檢測算法:精確與效率的博弈 目標檢測是計算機視覺領域的一個核心任務,它涉及在圖像或視頻中識別和定位多個對象。雙階段目標檢測算法是一種特殊的目標檢測方法,它通過兩個階段來提高檢測的準確性。本文將詳細介紹雙階段目標檢測算…

小型語言模型的興起

過去幾年,我們看到人工智能能力呈爆炸式增長,其中很大一部分是由大型語言模型 (LLM) 的進步推動的。GPT-3 等模型包含 1750 億個參數,已經展示了生成類似人類的文本、回答問題、總結文檔等能力。然而,雖然 LLM 的能力令人印象深刻…