[英]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.