簡體   English   中英

繞另一點C#旋轉3D對象

[英]Rotate 3D object around another point C#

首先,我對粗糙的圖紙表示歉意,但我對3D操作並不精通,對矩陣也只有一個非常基本的了解,因此請盡可能清楚地解釋一切,並且不要假設我的知識水平。

我目前正在收集經度和緯度數據,並將其轉換為具有以下功能的笛卡爾X,Y和Z:

public CartesianXYZ LonLat2Cartesian(double lon, double lat)
{
    CartesianXYZ XYZ = new CartesianXYZ();
    var R = 6371000;
    XYZ.X = Convert.ToInt32(R * Math.Cos(lat) * Math.Cos(lon));
    XYZ.Y = Convert.ToInt32(R * Math.Sin(lat) * Math.Cos(lon));
    XYZ.Z = Convert.ToInt32(R * Math.Sin(lat));
    return XYZ;
}

當將它們繪制在圖形上時,我發現即使這些點彼此非常接近,Y軸的變化也相當大,我認為這是由於我們坐在球體上,除非我位於北方桿,它會被認為是傾斜的,越接近我的赤道。 (如果不是這種情況,請告訴我)

請查看3D散點圖中繪制的以下三點

在此處輸入圖片說明

點A將被視為用戶所在的“中心”點

B點是用戶南邊的一個點

C點是用戶北邊的直接點

我希望實現的是將點B和C繞點A旋轉,以使它們的Y值相同,並且我可以將圖形視為點的2D表示,我發現只需將Y更改為最終的點與這些點的偏斜版本。

最終目標是使用用戶的標題並找出是否有任何點在他們的視野內(用於增強現實)

任何幫助,有用的批評或有用文章的鏈接,將不勝感激。

您得到了錯誤的方程式(也沒有在之前發現它):)

public CartesianXYZ LonLat2Cartesian(double lon, double lat)
    {
    CartesianXYZ XYZ = new CartesianXYZ();
    var R = 6371000;
    XYZ.X = Convert.ToInt32(R * Math.Cos(lat) * Math.Cos(lon));
    XYZ.Y = Convert.ToInt32(R * Math.Cos(lat) * Math.Sin(lon));
    XYZ.Z = Convert.ToInt32(R * Math.Sin(lat));
    return XYZ;
    }

順便說一下,這只是我們的星球所不知道的球體,因此如果您需要更精確的結果,請使用WGS84:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM