ArcGIS Pro SDK (九)幾何 2 坐標

ArcGIS Pro SDK (九)幾何 2 坐標

文章目錄

  • ArcGIS Pro SDK (九)幾何 2 坐標
    • 1 矢量極坐標
    • 2 獲取矢量傾角
    • 3 獲取矢量方位角
    • 4 向量運算
    • 5 2D 矢量操作
    • 6 生成器

環境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0

1 矢量極坐標

Coordinate3D polarVector = new Coordinate3D(0, 7, 0);
Tuple<double, double, double> polarComponents = polarVector.QueryPolarComponents();
// polarComponents.Item1 = 0  (方位角)
// polarComponents.Item2 = 0 (傾角)
// polarComponents.Item3 = 7 (大小)polarVector.SetPolarComponents(Math.PI / 4, Math.PI / 2, 8);
polarComponents = polarVector.QueryComponents();
// polarComponents.Item1 = 0 (x)
// polarComponents.Item2 = 0 (y)
// polarComponents.Item3 = 7 (z)

2 獲取矢量傾角

Coordinate3D v = new Coordinate3D(0, 0, 7);
double inclination = v.Inclination;         // inclination = PI/2v.SetComponents(-2, -3, 0);
inclination = v.Inclination;                // inclination = 0v.SetComponents(0, 0, -2);
inclination = v.Inclination;                // inclination = -PI/2

3 獲取矢量方位角

Coordinate3D vector = new Coordinate3D(0, 7, 0);
double azimuth = vector.Azimuth;      // azimuth = 0vector.SetComponents(1, 1, 42);
azimuth = vector.Azimuth;
double degrees = AngularUnit.Degrees.ConvertFromRadians(azimuth);       // degrees = 45vector.SetComponents(-8, 8, 2);
azimuth = vector.Azimuth;
degrees = AngularUnit.Degrees.ConvertFromRadians(azimuth);              // degrees = 315

4 向量運算

// 簡單的3D向量
Coordinate3D v = new Coordinate3D(0, 1, 0);
// v.Magnitude = 1Coordinate3D other = new Coordinate3D(-1, 0, 0);
// other.Magnitude = -1double dotProduct = v.DotProduct(other);      // dotProduct = 0Coordinate3D crossProduct = v.CrossProduct(other);
// crossProduct.X = 0
// crossProduct.Y = 0
// crossProduct.Z = 1Coordinate3D addVector = v.AddCoordinate3D(other);
// addVector.X = -1
// addVector.Y = 1
// addVector.Z = 0// 繞x軸旋轉
Coordinate3D w = v;
w.Rotate(Math.PI, other);
// w.X = 0
// w.Y = -1
// w.Z = 0w.Scale(0.5);
// w.X = 0
// w.Y = -0.5
// w.Z = 0w.Scale(-4);
// w.X = 0
// w.Y = 2
// w.Z = 0
// w.Magnitude = 2w.Move(3, 2, 0);
// w.X = 3
// w.Y = 4
// w.Z = 0
// w.Magnitude = 5Coordinate3D emptyVector = new Coordinate3D();
// emptyVector = (0, 0, 0)
emptyVector.SetEmpty();
// emptyVector = (Nan, Nan, Nan)Coordinate3D c1 = new Coordinate3D(2, 3, 4);
Coordinate3D c2 = new Coordinate3D(9, -1, 3);var result_add = c1 + c2;
// result_add = (11, 2, 7)
var result_sub = c1 - c2;
// result_sub = (-7, 4, 1)var b = result_sub != result_add;
// b = trueresult_add = emptyVector + c1;
// result_add = (Nan, Nan, Nan)b = result_add == emptyVector;
// b = true

5 2D 矢量操作

Coordinate2D v = new Coordinate2D(0, 1);
// v.Magnitude = 1Coordinate2D other = new Coordinate2D(-1, 0);
double dotProduct = v.DotProduct(other);
// dotProduct = 0Coordinate2D w = v + other;
// w = (-1, 1)w += other;
// w = (-2, 1)w -= other;
// w = (-1, 1)w = v;
w.Rotate(Math.PI, other);
// w = (-2, -1)w = other;w.Scale(-4);
// w = (4, 0)
// w.Magnitude = 4w.Move(-1, 4);
// w = (3, 4)
// w.Magnitude = 5w.Move(-6, -1);
Tuple<double, double> components = w.QueryComponents();
// components = (-3, 3)
// w.Magnitude = 3 * Math.Sqrt(2)Coordinate2D unitVector = w.GetUnitVector();
// w = (-Math.Sqrt(2) / 2, Math.Sqrt(2) / 2)
// w.Magnitude = 1w.SetComponents(3, 4);

6 生成器

// 點列表
List<MapPoint> points = new List<MapPoint>
{MapPointBuilderEx.CreateMapPoint(0, 0, 2, 3, 1),MapPointBuilderEx.CreateMapPoint(1, 1, 5, 6),MapPointBuilderEx.CreateMapPoint(2, 1, 6),MapPointBuilderEx.CreateMapPoint(0, 0)
};// 將有屬性,因為它是通過便捷方法創建的
Polyline polylineWithAttrs = PolylineBuilderEx.CreatePolyline(points);
bool hasZ = polylineWithAttrs.HasZ;          // hasZ = true
bool hasM = polylineWithAttrs.HasM;          // hasM = true
bool hasID = polylineWithAttrs.HasID;        // hasID = true// 將沒有屬性,因為它被指定為參數
Polyline polylineWithoutAttrs = PolylineBuilderEx.CreatePolyline(points, AttributeFlags.None);
hasZ = polylineWithoutAttrs.HasZ;          // hasZ = false
hasM = polylineWithoutAttrs.HasM;          // hasM = false
hasID = polylineWithoutAttrs.HasID;        // hasID = false// 將有屬性,因為它是通過便捷方法創建的
Polygon polygonWithAttrs = PolygonBuilderEx.CreatePolygon(points);
hasZ = polygonWithAttrs.HasZ;               // hasZ = true
hasM = polygonWithAttrs.HasM;               // hasM = true
hasID = polygonWithAttrs.HasID;             // hasID = true// 將沒有屬性,因為它被指定為參數
Polygon polygonWithoutAttrs = PolygonBuilderEx.CreatePolygon(points, AttributeFlags.None);
hasZ = polygonWithoutAttrs.HasZ;               // hasZ = false
hasM = polygonWithoutAttrs.HasM;               // hasM = false
hasID = polygonWithoutAttrs.HasID;             // hasID = false// 將沒有屬性,因為它被指定為參數
PolylineBuilderEx polylineB = new PolylineBuilderEx(points, AttributeFlags.None);
hasZ = polylineB.HasZ;                      // hasZ = false
hasM = polylineB.HasM;                      // hasM = false
hasID = polylineB.HasID;                    // hasID = false// 將有屬性,因為它傳遞了一個帶屬性的折線
polylineB = new PolylineBuilderEx(polylineWithAttrs);
hasZ = polylineB.HasZ;                      // hasZ = true
hasM = polylineB.HasM;                      // hasM = true
hasID = polylineB.HasID;                    // hasID = true// 將沒有屬性,因為它傳遞了一個不帶屬性的折線
polylineB = new PolylineBuilderEx(polylineWithoutAttrs);
hasZ = polylineB.HasZ;                      // hasZ = false
hasM = polylineB.HasM;                      // hasM = false
hasID = polylineB.HasID;                    // hasID = false// 將沒有屬性,因為它被指定為參數
PolygonBuilderEx polygonB = new PolygonBuilderEx(points, AttributeFlags.None);
hasZ = polygonB.HasZ;                       // hasZ = false
hasM = polygonB.HasM;                       // hasM = false
hasID = polygonB.HasID;                     // hasID = false// 將有屬性,因為它傳遞了一個帶屬性的多邊形
polygonB = new PolygonBuilderEx(polygonWithAttrs);
hasZ = polygonB.HasZ;                       // hasZ = true
hasM = polygonB.HasM;                       // hasM = true
hasID = polygonB.HasID;                     // hasID = true// 將沒有屬性,因為它傳遞了一個不帶屬性的多邊形
polygonB = new PolygonBuilderEx(polygonWithoutAttrs);
hasZ = polygonB.HasZ;                       // hasZ = true
hasM = polygonB.HasM;                       // hasM = true
hasID = polygonB.HasID;                     // hasID = true

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

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

相關文章

知識圖譜數據庫基本知識

文章目錄 知識圖譜數據模型知識圖譜查詢語言隨著知識圖譜規模的日益增長,數據管理愈加重要。一方面,以文件形式保存的知識圖譜顯然無法滿足用戶的查詢、檢索、推理、分析及各種應用需求;另一方面,傳統數據庫的關系模型與知識圖譜的圖模型之間存在顯著差異,關系數據庫無法有…

ctfshow-web入門-php特性(web96-web99)

目錄 1、web96 2、web97 3、web98 4、web99 1、web96 試了下通配、轉義、拼接、大小寫都不行 這里使用絕對路徑或者當前路徑繞過&#xff1a; ?u./flag.php ?u/var/www/html/flag.php 還可以使用 php 偽協議&#xff1a; ?uphp://filter/resourceflag.php 2、web97 關…

數據結構(Java):力扣Stack集合OJ題

1、括號匹配問題 . - 力扣&#xff08;LeetCode&#xff09; 1.1 思路分析 根據棧的先進后出原則&#xff0c;我們可以這樣解決問題&#xff1a; 遍歷字符串&#xff0c;遇見左括號就將左括號push入棧&#xff1b;遇見右括號就pop出棧&#xff0c;將出棧的元素和該右括號比較…

pyparsing開啟調試

在要匹配的表達后添加set_debug

【密碼學】實現消息認證或數字簽名的幾種方式

消息認證的目的是驗證消息的完整性和確認消息的來源。數字簽名的目的是不僅驗證消息的完整性和來源&#xff0c;還提供了不可否認性。此外&#xff0c;數字簽名還可以驗證消息的創建時間&#xff0c;防止重放攻擊。那么具體有哪些實現的方式呢&#xff1f; 一、僅提供消息認證…

python練習(if--else)

通過input語句獲取鍵盤輸入的身高 判斷身高是否超過120cm&#xff0c;并通過print給出提示信息。 代碼輸出示例&#xff1a; 1.歡迎來到樂園。 請輸入你的身高&#xff08;cm&#xff09;&#xff1a;130 您的身高超出120cm&#xff0c;游玩需要夠票10元。 祝您游玩愉快。 2…

文件內容查閱

cat concatenate files and print on the standard output Linux中一個最簡單的且最常用的命令是cat命令。其功能是在終端設備上顯示文件內容。 cat命令-n選項用于顯示行號。 tac concatenate and print files in reverse tac命令的功能是用于反向顯示文件內容&#xff0c;即…

計算機網絡復習筆記【面向考綱整理】

計算機網絡復習筆記 一、計算機網絡體系結構&#xff08;一&#xff09;計算機網絡的概念、分類、組成與功能1.計算機網絡的概念、組成與功能1.1計算機網絡的概念1.2計算機網絡的組成1.3計算機網絡的功能 2.計算機網絡的分類3.計算機網絡的標準化工作及相關知識 &#xff08;二…

MT6816磁編碼IC在工控機器人中的應用

在現代工業自動化領域&#xff0c;高精度的位置檢測和控制技術對于機器人系統的穩定運行至關重要。MT6816磁編碼IC作為一款先進的磁傳感器解決方案&#xff0c;以其卓越的性能和穩定性&#xff0c;在工控機器人中得到了廣泛的應用。本文將詳細探討MT6816磁編碼IC在工控機器人中…

azure學習在日本IT工作的重要性

在日本數字化轉型的浪潮中,微軟Azure已經成為眾多企業的首選云平臺。作為全球第二大云服務提供商,Azure在日本市場的重要性與日俱增。本文將探討為什么學習Azure對日本IT專業人士至關重要,以及如何通過lalapodo云原生技術的培訓課程,快速掌握這一關鍵技能。 Azure在日本的戰略地…

血液及造血系統疾病病人的護理

一、血液及造血系統疾病病人的基礎護理 對于患有血液及造血系統疾病的病人&#xff0c;護理工作的重點首先在于密切監測生命體征&#xff0c;包括體溫、心率、呼吸頻率和血壓。 飲食護理也十分關鍵&#xff0c;要保證病人攝入充足的營養&#xff0c;以增強抵抗力。例如&#xf…

【Django+Vue3 線上教育平臺項目實戰】構建高效線上教育平臺之首頁模塊

文章目錄 前言一、導航功能實現a.效果圖&#xff1a;b.后端代碼c.前端代碼 二、輪播圖功能實現a.效果圖b.后端代碼c.前端代碼 三、標簽欄功能實現a.效果圖b.后端代碼c.前端代碼 四、側邊欄功能實現1.整體效果圖2.側邊欄功能實現a.效果圖b.后端代碼c.前端代碼 3.側邊欄展示分類及…

element UI時間組件兩種使用方式

加油&#xff0c;新時代打工&#xff01; 組件官網&#xff1a;https://element.eleme.cn/#/zh-CN/component/date-picker 先上效果圖&#xff0c;如下&#xff1a; 第一種實現方式 <div class"app-container"><el-formref"submitForm":model&q…

Linux C++ 052-設計模式之享元模式

Linux C 052-設計模式之享元模式 本節關鍵字&#xff1a;Linux、C、設計模式、享元模式 相關庫函數&#xff1a; 概念 享元模式&#xff08;FlyWeight&#xff09;&#xff0c;運用共享技術有效的支持大量細粒度的對象。 典型的享元模式的例子為文書處理器中以圖形結構來表…

探索 Prompt 的世界:讓你的 AI 更智能

探索 Prompt 的世界&#xff1a;讓你的 AI 更智能 引言什么是 Prompt&#xff1f;Prompt 的重要性如何編寫有效的 Prompt1. 清晰明確2. 包含關鍵細節3. 提供上下文 實踐中的 Prompt 技巧1. 多次迭代2. 實驗不同風格3. 結合實際應用 總結 引言 隨著人工智能&#xff08;AI&…

數據恢復篇:適用于 Android 的恢復工具

正在擺弄 Android 設備。突然&#xff0c;您意外刪除了一張或多張圖片。不用擔心&#xff0c;您總能找到一款價格實惠的照片恢復應用。這款先進的軟件可幫助 Android 用戶從硬盤、安全數字 (SD) 或存儲卡以及數碼相機中恢復已刪除的圖片。 Android 上文件被刪除的主要原因 在獲…

采用自動微分進行模型的訓練

自動微分訓練模型 簡單代碼實現&#xff1a; import torch import torch.nn as nn import torch.optim as optim# 定義一個簡單的線性回歸模型 class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear nn.Linear(1, 1) …

【Linux】數據流重定向

數據流重定向&#xff08;redirect&#xff09;由字面上的意思來看&#xff0c;好像就是將【數據給它定向到其他地方去】的樣子&#xff1f; 沒錯&#xff0c;數據流重定向就是將某個命令執行后應該要出現在屏幕上的數據&#xff0c;給它傳輸到其他的地方&#xff0c;例如文件或…

[圖解]企業應用架構模式2024新譯本講解26-層超類型2

1 00:00:00,510 --> 00:00:03,030 這個時候&#xff0c;如果再次查找所有人員 2 00:00:03,040 --> 00:00:03,750 我們會發現 3 00:00:05,010 --> 00:00:06,370 這一次所有的對象 4 00:00:06,740 --> 00:00:08,690 都是來自標識映射的 5 00:00:10,540 --> 00…

VB 上位機開發

VB 上位機開發第一節 在 VB(Visual Basic)上位機開發的第一節課程中涵蓋以下基礎內容: 一、上位機開發簡介 解釋上位機的概念和作用,它是與硬件設備進行通信和控制的軟件應用程序。舉例說明上位機在工業自動化、智能家居、監控系統等領域的應用。二、VB 開發環境介紹 展示如…