こんにちは,初めまして。ゲームプログラミングに興味を持ち,参考にさせて頂いています。
早速ですが,件名内の以下のコードの,コメント付き(できれば毎行…)の解説が欲しく思いました。
/* ここから引用 */
//点と線分との距離を求める
double get_distance(double x, double y, double x1, double y1,
double x2, double y2){
double dx,dy,a,b,t,tx,ty;
double distance;
dx = (x2 - x1); dy = (y2 - y1);
a = dx*dx + dy*dy;
b = dx * (x1 - x) + dy * (y1 - y);
t = -b / a;
if (t < 0) t = 0;
if (t > 1) t = 1;
tx = x1 + dx * t;
ty = y1 + dy * t;
distance = sqrt((x - tx)*(x - tx) + (y - ty)*(y - ty));
return distance;
}
/* ここまで引用 */
「垂線のベクトルと線分αβとの内積が0になる」ことは調べてみてなんとかわかったのですが…
aは線分の長さの2乗?とするとbやtは…等と考えているうちに頭がぐるぐるとなってしまいました。
お恥ずかしい限りです…学生時代の数学や物理って結構難しかったのだなぁとしみじみ思います。
よろしくお願い致します。
「レーザーを作ってみよう」(龍神録34章)内のコードについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 「レーザーを作ってみよう」(龍神録34章)内のコードについて
こういう分からない物の理解はご自分で出来るだけコメントを書いてわからない部分だけ?にしておきます。で?の部分だけ質問するのです。
少しは分かるところがありますよね?
※ 全部答えてもらうとダメな理由は人の書いたもの見ると分かった気になるからです。
あと、こんな方法もあります。
1) 幾つかのパターンで図形を書いてみる。このとき変数名を図に書き添える。
2) get_distance関数の動作を確認するミニ・プログラムを書く。
このときDrawFormatStirngなどで全部の変数を表示させる。
これだけやったら理解が進むと思いますが如何でしょうか?
プログラムだけ見ていると混乱すると思いますが別アプローチですぐ解決するかも知れませんよ。
少しは分かるところがありますよね?
※ 全部答えてもらうとダメな理由は人の書いたもの見ると分かった気になるからです。
あと、こんな方法もあります。
1) 幾つかのパターンで図形を書いてみる。このとき変数名を図に書き添える。
2) get_distance関数の動作を確認するミニ・プログラムを書く。
このときDrawFormatStirngなどで全部の変数を表示させる。
これだけやったら理解が進むと思いますが如何でしょうか?
プログラムだけ見ていると混乱すると思いますが別アプローチですぐ解決するかも知れませんよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 「レーザーを作ってみよう」(龍神録34章)内のコードについて
こんばんわ。アドバイスありがとうございます!
もう少し粘って頑張ってみます。理解が進みましたら再度質問させていただきたいと思います。
もう少し粘って頑張ってみます。理解が進みましたら再度質問させていただきたいと思います。