皆様こんにちは。
第1回目のUnity入学式が無事に終わってほっとしている山田です。
次は9月末の第2回目の準備しなきゃ。。
動機
平面の円周上にオブジェクトを等間隔で配置したい時に、ポジション(X座標とY座標)を自動で計算したい時があります。
そんな時にパラメータを変えてどんな感じになるか試したいのですが、ポジションを数値で見てもよくわからないので2次元グラフにプロットしてほしいと思いました。
ポジションを計算するコード
var angleDiff = 180f / 9;
var startAngle = 0f;
var radius = 4;
var distance = 0;
var positions = Enumerable.Range(0, 10).Select(x =>
{
var angle = (startAngle + angleDiff * x) * UnityEngine.Mathf.Deg2Rad;
return new
{
XPos = radius * UnityEngine.Mathf.Cos(angle),
ZPos = radius * UnityEngine.Mathf.Sin(angle) + distance
};
});
数値で見てもよくわからない例
Index | X Position | Y Position |
---|---|---|
1 | 4 | 0 |
2 | 3.76 | 1.37 |
3 | 3.06 | 2.57 |
4 | 2 | 3.46 |
5 | 0.69 | 3.94 |
6 | -0.69 | 3.94 |
7 | -2 | 3.46 |
8 | -3.06 | 2.57 |
9 | -3.76 | 1.37 |
10 | -4 | 0 |
LINQPad
LINQPadは無償で提供されているアプリケーションで、Linqや.NETのコードをインタプリタ的に実行できるツールです。
出力もグラフ表示などで出力することができます。
詳しくは以下の記事などを見てください。
LINQPadを使ってみよう
今日からはじめる LINQPad
DBに接続することもできるので、DBからSelectしてLinqでいい感じに集計してグラフ表示することもできます。
僕も以前Redisに接続してデータ表示や更新、追加するスクリプトをLINQPadで作ったことがあります。
LINQPadでグラフ表示
以下の様に書くだけでグラフ表示できます。
var angleDiff = 180f / 9;
var startAngle = 0f;
var radius = 4;
var distance = 0;
Enumerable.Range(0, 10).Select(x =>
{
var angle = (startAngle + angleDiff * x) * UnityEngine.Mathf.Deg2Rad;
return new
{
XPos = radius * UnityEngine.Mathf.Cos(angle),
ZPos = radius * UnityEngine.Mathf.Sin(angle) + distance
};
})
.Chart(x => x.XPos, x => x.ZPos, LINQPad.Util.SeriesType.Point)
.Dump();
なお、上記のコードを実行するためにはUnityEndine.dllのimportが必要になります。
QueryPropertiesでUnityEndine.dllの場所を追加します。
(UnityEndine.dllはUnityをインストールするとPCに追加されます。)
ChartのオプションをPointからLineに変更すると点ではなく線で表示してくれたりします。
便利ですね!
棒グラフも表示できます。
【.NET】LINQPadでお手軽にオブジェクトを可視化する
ちょっと情報が少なくてオプションなど探すのが困るのが残念です。
公式サイトにもうちょっと説明が欲しいですね。
では皆様良いLINQPadライフを!