投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/10/6 11:43:03
> これはソフトウェア的には(visual studio?)
映像を見る限りでは、Visual Studio 2019 ですね。

> ですが、visual studioを使う側がボールの座標、ボールの移動量としてint型の変数をうまく扱っているだけで
ここでいう「visual studioを使う側」というのが、
開発者(プログラマー)を指しているのであれば、その認識で OK かと思います。

Visual Studio が int 型を扱っている、という認識だと用語的には NG ですが。


> visual studio側が特別な仕様や概念が用意されるわけではないんですね。
Visual Studio は全く関係ありません。
そもそも、Visual Studio 無しでもコーディングやコンパイルは可能ですし。

コーディング時に使われる機能を大別化すると、たとえばこのように分類できます。

(1) Visual Studio やそのアドインによって提供される機能
(2) C# や C などの言語(あるいはそのコンパイラ)によって齎せられる機能
(3) .NET / .NET Framework といったフレームワーク、あるいは NuGet や参照設定で使えるライブラリで提供される機能

---
1 の例:ステップ実行、入力支援機能(IntelliSense)、CodeLense など
2 の例:int 型、UTF-8 リテラル、タプル要素名推論 など
3 の例:System.Int32 構造体、Point 構造体、Vector 構造体など

※機能によっては、2 + 3 の組み合わせで提供されるものなどもあります。


> var v = new System.Windows.Vector(100d, -173d); の、100dがなぜ右向きに 30 の大きさになるのか、
うゎぁ…ごめんなさい修正漏れです! (ホント深夜に投稿するもんじゃないですね…)

右向きに 100 の間違いです。本当に混乱させてすみません。
【右向きに 100、上向きに 173 のベクトル】です。


v = Vector(100, -173) の場合、v.X の値は 100 になり、v.Y が -173 になるわけですが、
三角比の定義により、「30°、60°、90°」の直角三角形の 3 辺の比は「1:2:√3」です。
つまり「水平に 100.000:垂直に173.205」な三角形は、斜辺の長さが 200.000、その角度が 60°と定まります。

角度については、逆三角関数 arctangent で求められますね。
Excel で「=DEGREES(ATAN(-173/100))」と計算させることで、約 -59.9706 という角度を得られます。
演算結果がマイナスの値になるのは、数学で扱う「右手座標系」と、グラフィックで扱う「左手座標系」とで、
Y 軸の正負の向きが逆であることが原因です。

数学で使うグラフは通常、左下を原点座標 (0, 0) とし、右方向が +X、上方向が +Y として図示される座標系ですが、
グラフィック処理(印刷処理なども)では左上を原点とします。右方向が +X、上方向が -Y、下方向が +Y です。


> なぜ全ての数値に「d」が付いてるのか分かりませんでした。
数値の末尾につく d または D とは、「double 型のリテラルであることを示す接尾辞(サフィックス)」です。
たとえばこのような接尾辞があります。


var v1 = 100;   // これは int 型
var v2 = 10.0;  // これは double 型
var v3 = 10D;   // これも double 型
var v4 = 10F;   // これは float 型
var v5 = 10M;   // これは decimal 型
var v6 = 10L;   // これは long 型
var v7 = 10UL;  // これは ulong 型
var v8 = 10U;   // これは uint 型
var v9 = 10UL;  // これは ulong 型



接尾辞では、大文字小文字が区別されません。
たとえば、ulong 型の接尾辞は UL、Ul、uL、ul、LU、Lu、lU、lu のいずれでも構いません。

System.Windows.Vector 構造体のコンストラクターが、引数として「2 つの double 値」を要求するので、
先の例では d を明示しました。先の例では、int を渡しても、自動的に double に変換されるので
d を付けなくても同じ結果を得られますが、オーバーロードを持つメソッドを使う場合は、
引数の型によって振る舞いが変わることがあるので、データ型は大事です。

型繋がりの蛇足情報ですが、decimal 型においては小数部の桁数も保持されます。

 decimal x = 100.00M;
 decimal y = 100.0000M;
 bool z = (x == y); // これは true として扱われるが…
 string X = x.ToString(); // これは "100.00"
 string Y = y.ToString(); // これは "100.0000"


また、「負のゼロ」という概念もあります。

 double x = 0.0;
 double y = -0.0;
 bool z = (x == y); // これは true として扱われるが…
 string X = 1.0 / x; // これは "∞"
 string Y = 1.0 / y; // これは "-∞"