「レーザーを作ってみよう」(龍神録34章)内のコードについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mei

「レーザーを作ってみよう」(龍神録34章)内のコードについて

#1

投稿記事 by mei » 13年前

こんにちは,初めまして。ゲームプログラミングに興味を持ち,参考にさせて頂いています。

早速ですが,件名内の以下のコードの,コメント付き(できれば毎行…)の解説が欲しく思いました。

/* ここから引用 */
//点と線分との距離を求める
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は…等と考えているうちに頭がぐるぐるとなってしまいました。
お恥ずかしい限りです…学生時代の数学や物理って結構難しかったのだなぁとしみじみ思います。
よろしくお願い致します。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 「レーザーを作ってみよう」(龍神録34章)内のコードについて

#2

投稿記事 by softya(ソフト屋) » 13年前

こういう分からない物の理解はご自分で出来るだけコメントを書いてわからない部分だけ?にしておきます。で?の部分だけ質問するのです。
少しは分かるところがありますよね?
※ 全部答えてもらうとダメな理由は人の書いたもの見ると分かった気になるからです。

あと、こんな方法もあります。
1) 幾つかのパターンで図形を書いてみる。このとき変数名を図に書き添える。
2) get_distance関数の動作を確認するミニ・プログラムを書く。
このときDrawFormatStirngなどで全部の変数を表示させる。
これだけやったら理解が進むと思いますが如何でしょうか?

プログラムだけ見ていると混乱すると思いますが別アプローチですぐ解決するかも知れませんよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mei
記事: 1
登録日時: 13年前

Re: 「レーザーを作ってみよう」(龍神録34章)内のコードについて

#3

投稿記事 by mei » 13年前

こんばんわ。アドバイスありがとうございます!
もう少し粘って頑張ってみます。理解が進みましたら再度質問させていただきたいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る