![](https://static.wixstatic.com/media/ea798a_56c63e10ea61420abeb513f0fd68b89f~mv2.jpg/v1/fill/w_1920,h_1080,al_c,q_90,enc_avif,quality_auto/ea798a_56c63e10ea61420abeb513f0fd68b89f~mv2.jpg)
惑星の中心を計算する!
惑星上の複数の地点で GPS 座標と重力ベクトルを測定することで、この惑星の中心座標を計算します。計測点には、土台のアーマーブロックの上にリモートコントロール、スモールリアクター、LCD パネル、プログラマブルブロックからなる写真のような簡単な装置を作りました。プログラマブルブロックの中のスクリプトは以下の通りです。
![Space Engineers 2018_06_10 16_04_58.mp4_](https://static.wixstatic.com/media/ea798a_c7432e4b0e394241a894e6e3cc41bdd9~mv2.jpg/v1/crop/x_93,y_0,w_1734,h_1080/fill/w_435,h_271,al_c,q_80,usm_0.66_1.00_0.01,enc_avif,quality_auto/Space%20Engineers%202018_06_10%2016_04_58_mp4_.jpg)
public void Main(string argument, UpdateType updateSource)
{
var target = GridTerminalSystem.GetBlockWithName("Remote Control 2") as IMyRemoteControl;
var lcd = GridTerminalSystem.GetBlockWithName("Text panel") as IMyTextPanel;
Vector3D gv = target.GetNaturalGravity();
double x = gv.X;
double y = gv.Y;
double z = gv.Z;
string info = "<Gravity vector>\n";
info += "X: " + x.ToString() + "\n";
info += "Y: " + y.ToString() + "\n";
info += "Z: " + z.ToString() + "\n";
info += "G: " + gv.Length() + "\n\n";
info += "<Nomralized vector>\n";
info += "X: " + (x/gv.Length()).ToString() + "\n";
info += "Y: " + (y/gv.Length()).ToString() + "\n";
info += "Z: " + (z/gv.Length()).ToString() + "\n";
if (lcd != null){
lcd.WritePublicText(info);
lcd.ShowPublicTextOnScreen();
}
}
まず、リモートコントロールと LCD パネルを取得します。
var target = GridTerminalSystem.GetBlockWithName("Remote Control 2") as IMyRemoteControl;
var lcd = GridTerminalSystem.GetBlockWithName("Text panel") as IMyTextPanel;
取得したリモートコントロールの GetNaturalGravity メソッドで、この惑星の重力ベクトルを Vector3D 型の変数に格納し、ベクトルの各成分をさらに double 型変数に分けて格納します。
Vector3D gv = target.GetNaturalGravity();
double x = gv.X;
double y = gv.Y;
double z = gv.Z;
LCD パネルに表示するデータを string 型の変数 info に代入していきます。
string info = "<Gravity vector>\n";
info += "X: " + x.ToString() + "\n";
info += "Y: " + y.ToString() + "\n";
info += "Z: " + z.ToString() + "\n";
info += "G: " + gv.Length() + "\n\n";
info += "<Nomralized vector>\n";
info += "X: " + (x/gv.Length()).ToString() + "\n";
info += "Y: " + (y/gv.Length()).ToString() + "\n";
info += "Z: " + (z/gv.Length()).ToString() + "\n";
LCD パネルの WritePublicText メソッドで表示データを Public Text に書き出し、さらに ShowPublicTextOnScreen メソッドで LCD パネルに表示します。
if (lcd != null){
lcd.WritePublicText(info);
lcd.ShowPublicTextOnScreen();
}