Celestia/Celx 指令碼/CELX Lua 方法/Celx 座標系
下標文字= Celx 指令碼: 座標系 =
一個“座標系”物件是定義一個天體軌跡和方位使用的座標系的原點和座標軸。原點是星表檔案定義的另一個天體。可以使用幾種方法來設定座標軸。
用來描述天體軌跡和方位的參考座標系並不一定相同。這在某些情況下很有用。例如,一顆衛星的軌道可以給出在以地心為中心的赤道座標系中,而其姿態則給出在當地垂直-當地水平座標系中。
在 CELX 指令碼中,座標系方法需要加上獲得的“座標系”物件作為字首,兩者用分號分隔。
以下方法可用於獲取“座標系”物件
- 使用 celestia:newframe() 方法。
- 使用 observer:getframe() 方法。
- 使用 1.6.0 object:bodyfixedframe() 方法。
- 使用 1.6.0 object:equatorialframe() 方法。
- 使用 1.6.0 object:orbitframe() 方法。
- 使用 1.6.0 object:bodyframe() 方法。
- 使用 1.6.0 phase:orbitframe() 方法。
- 使用 1.6.0 phase:bodyframe() 方法。
本章列出了所有可用的座標系方法,這些方法可用於“座標系”物件。
位置 frame:to(位置:univ)
將一個位置從宇宙座標轉換為座標系座標。轉換後的位置將作為“位置”物件返回。
引數
- univ
- 宇宙座標中的位置,需要轉換為座標系座標。必須是“位置”物件。
說明
- CELX “位置”物件包含空間中一個點的精確座標。位置是相對於座標系而言的,在進一步使用之前可能需要轉換為或從宇宙座標轉換為座標系座標。
- 可以使用 位置 方法處理 CELX “位置”物件。“位置”物件也可以用在其他需要“位置”物件作為引數的方法中。
示例
轉到地球中心的兩倍距離的位置,地球中心是“黃道”參考座標系的原點(跟隨)。
-- Find, select, center and follow Earth first
obs = celestia:getobserver()
earth = celestia:find("Sol/Earth")
celestia:select(earth)
obs:center(earth,0.0)
wait(0.0)
frame = celestia:newframe("ecliptic", earth)
obs:setframe(frame)
-- Get actual observer position and convert to frame coordinates
obs_pos = obs:getposition()
obs_pos_f = frame:to(obs_pos)
-- Goto location at twice the current distance to the Earth's center
obs_pos_2f = celestia:newposition(2*obs_pos_f.x, 2*obs_pos_f.y, 2*obs_pos_f.z)
obs:gotolocation(obs_pos_2f, 1.0)
wait(1.0)
旋轉 frame:to(旋轉:univ [, 數值:時間 ])
在指定的時間將旋轉從宇宙參考座標系轉換為該參考座標系。轉換後的旋轉將作為“旋轉”物件返回。
引數
- univ
- 來自宇宙參考座標系的旋轉,需要轉換為該參考座標系。必須是“旋轉”物件。
- 時間
- 該轉換的 TDB (質心動力學時) 儒略日數。
Celestia 版本在低於 1.5.0 版本的版本使用 UTC (協調世界時) 儒略日數來進行該轉換。
如果省略時間,則使用當前模擬時間。
說明
- CELX “旋轉”物件在內部是一個四元數,它是數學描述三維旋轉的一種方法(即它可以轉換為旋轉矩陣)。旋轉也可以用來描述物體的方位或觀察者的方位(即觀察者看向哪裡,以及“向上”在哪裡)。
- 可以使用 旋轉 方法處理 CELX “旋轉”物件。“旋轉”物件也可以用在其他需要“旋轉”物件作為引數的方法中。
- 舊版本的 Celestia 使用 UTC (協調世界時) 來計算時間和位置。從 1.5.0 版本開始,雖然 Celestia 仍然在螢幕上顯示 UTC,但它在內部使用 TDB 時間標度來進行所有其他操作,所以對於 CELX 指令碼來說 !!!
- TDB 時間標度與更熟悉的 UTC 有些不同。透過使用 TDB,Celestia 能更精確地定位天體。截至 2008 年 1 月 1 日,兩者之間的差異約為 65 秒。有關更多資訊,請參閱 Celestia/時間標度。
- 要轉換 UTC 和 TDB 時間,可以使用 1.5.0 celestia:utctotdb() 和 1.5.0 celestia:tdbtoutc() 方法。
- 要轉換普通日曆日期和儒略日,可以使用 celestia:tojulianday() 和 celestia:fromjulianday() 方法。
位置 frame:from(位置:rfpos [, 數值:時間])
在指定的時間將一個位置從座標系座標轉換為宇宙座標。轉換後的位置將作為“位置”物件返回。
引數
- rfpos
- 座標系座標中的位置,需要轉換為宇宙座標。必須是“位置”物件。
- 時間
- 該轉換的 TDB (質心動力學時) 儒略日數。
Celestia 版本在低於 1.5.0 版本的版本使用 UTC (協調世界時) 儒略日數來進行該轉換。
如果省略時間,則使用當前模擬時間。
說明
- CELX “位置”物件包含空間中一個點的精確座標。位置是相對於座標系而言的,在進一步使用之前可能需要轉換為或從宇宙座標轉換為座標系座標。
- 可以使用 位置 方法處理 CELX “位置”物件。“位置”物件也可以用在其他需要“位置”物件作為引數的方法中。
- 舊版本的 Celestia 使用 UTC (協調世界時) 來計算時間和位置。從 1.5.0 版本開始,雖然 Celestia 仍然在螢幕上顯示 UTC,但它在內部使用 TDB 時間標度來進行所有其他操作,所以對於 CELX 指令碼來說 !!!
- TDB 時間標度與更熟悉的 UTC 有些不同。透過使用 TDB,Celestia 能更精確地定位天體。截至 2008 年 1 月 1 日,兩者之間的差異約為 65 秒。有關更多資訊,請參閱 Celestia/時間標度。
- 要轉換 UTC 和 TDB 時間,可以使用 1.5.0 celestia:utctotdb() 和 1.5.0 celestia:tdbtoutc() 方法。
- 要轉換普通日曆日期和儒略日,可以使用 celestia:tojulianday() 和 celestia:fromjulianday() 方法。
旋轉 frame:from(旋轉:rfrot)
將旋轉從該參考座標系轉換為宇宙參考座標系。轉換後的旋轉將作為“旋轉”物件返回。
引數
- rfrot
- 該參考座標系的旋轉,需要轉換為宇宙參考座標系。必須是“旋轉”物件。
說明
- CELX “旋轉”物件在內部是一個四元數,它是數學描述三維旋轉的一種方法(即它可以轉換為旋轉矩陣)。旋轉也可以用來描述物體的方位或觀察者的方位(即觀察者看向哪裡,以及“向上”在哪裡)。
- 可以使用 旋轉 方法處理 CELX “旋轉”物件。“旋轉”物件也可以用在其他需要“旋轉”物件作為引數的方法中。
字串 frame:getcoordinatesystem()
返回一個描述座標系座標系的字串。字串將是以下之一
- universe
- ecliptic
- equatorial
- observer
- lock
- chase
- 1.6.0 bodyfixed
說明
- 在 Celestia 版本 1.6.0 中,名稱 bodyfixed 已取代 planetographic。
示例
obs = celestia:getobserver()
actual_frame = obs:getframe()
actual_coordsys = actual_frame:getcoordinatesystem()
celestia:print("Current Coordinate System: " .. actual_coordsys, 5.0, -1, -1, 2, 4)
wait(5.0)
物件 frame:getrefobject()
獲取該座標系的參考物件,即座標系中心,作為“物件”物件。
說明
- 對於宇宙參考座標系,將返回一個 nil 物件。
- CELX “物件”物件指的是像行星或恆星這樣的天體,但它也可以是位置或宇宙飛船。
- 可以使用 物件 方法處理 CELX “物件”物件。“物件”物件也可以用在其他需要“物件”物件作為引數的方法中。
示例
obs = celestia:getobserver()
actual_frame = obs:getframe()
refobj = actual_frame:getrefobject()
if not refobj then
celestia:print("Currently NO Reference Object present.", 5.0, -1, -1, 2, 4)
else
refobj_name = refobj:name()
celestia:print("Current Reference Object: " .. refobj_name, 5.0, -1, -1, 2, 4)
end
wait(5.0)
object frame:gettargetobject()
獲取相位鎖定幀的目標物件,以“物件”物件的格式。
說明
- 對於非相位鎖定幀,將返回一個 nil 物件。
- CELX “物件”物件指的是像行星或恆星這樣的天體,但它也可以是位置或宇宙飛船。
- 可以使用 物件 方法處理 CELX “物件”物件。“物件”物件也可以用在其他需要“物件”物件作為引數的方法中。
示例
obs = celestia:getobserver()
actual_frame = obs:getframe()
tarobj = actual_frame:gettargetobject()
if not tarobj then
celestia:print("Currently NO Target Object present.", 5.0, -1, -1, 2, 4)
else
tarobj_name = tarobj:name()
celestia:print("Current Target Object: " .. tarobj_name, 5.0, -1, -1, 2, 4)
end
wait(5.0)