龍神録第34章の長方形の辺と円の中心との距離のpt[i]について

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

龍神録第34章の長方形の辺と円の中心との距離のpt[i]について

#1

投稿記事 by Takumi » 11年前

長方形の辺と円の中心との距離について

コード:

    for(i=0;i<4;i++){
        if(get_distance(rpt.x,rpt.y,pt[i].x,pt[i].y,pt[(i+1)%4].x,pt[(i+1)%4].y)<r)
            return 1;
    }
最初私はこの構造体ptはpt_t pt[4]と書いてあり4つ用意されているのでレーザーの頂点の座標位置かと思っていましたが頂点の座標位置として計算すると線分(レーザー)と点(自機)の距離ではなくレーザーの頂点と点(自機)の距離が出てしまいました。
なのでpt.xとpt.yの値が設定されているところを探したら以下に辿り着きました。

コード:

			//あたり範囲を設定
			lazer[i].outpt[0].x=lazer[i].startpt.x+cos(lazer[i].angle+PI/2)*(lazer[i].haba*lazer[i].hantei)+cos(lazer[i].angle)*lazer[i].length*((1-lazer[i].hantei)/2);
			lazer[i].outpt[0].y=lazer[i].startpt.y+sin(lazer[i].angle+PI/2)*(lazer[i].haba*lazer[i].hantei)+sin(lazer[i].angle)*lazer[i].length*((1-lazer[i].hantei)/2);
			lazer[i].outpt[1].x=lazer[i].startpt.x+cos(lazer[i].angle-PI/2)*(lazer[i].haba*lazer[i].hantei)+cos(lazer[i].angle)*lazer[i].length*((1-lazer[i].hantei)/2);
			lazer[i].outpt[1].y=lazer[i].startpt.y+sin(lazer[i].angle-PI/2)*(lazer[i].haba*lazer[i].hantei)+sin(lazer[i].angle)*lazer[i].length*((1-lazer[i].hantei)/2);
			lazer[i].outpt[2].x=lazer[i].startpt.x+cos(lazer[i].angle-PI/2)*(lazer[i].haba*lazer[i].hantei)+cos(lazer[i].angle)*lazer[i].length*lazer[i].hantei+cos(lazer[i].angle)*lazer[i].length*((1-lazer[i].hantei)/2);
			lazer[i].outpt[2].y=lazer[i].startpt.y+sin(lazer[i].angle-PI/2)*(lazer[i].haba*lazer[i].hantei)+sin(lazer[i].angle)*lazer[i].length*lazer[i].hantei+sin(lazer[i].angle)*lazer[i].length*((1-lazer[i].hantei)/2);
			lazer[i].outpt[3].x=lazer[i].startpt.x+cos(lazer[i].angle+PI/2)*(lazer[i].haba*lazer[i].hantei)+cos(lazer[i].angle)*lazer[i].length*lazer[i].hantei+cos(lazer[i].angle)*lazer[i].length*((1-lazer[i].hantei)/2);
			lazer[i].outpt[3].y=lazer[i].startpt.y+sin(lazer[i].angle+PI/2)*(lazer[i].haba*lazer[i].hantei)+sin(lazer[i].angle)*lazer[i].length*lazer[i].hantei+sin(lazer[i].angle)*lazer[i].length*((1-lazer[i].hantei)/2);
これは例として「pt[0].x=lazer.outpt[0].x」となると思うのですが、上記のように何かの座標位置を求める事によってどうやって線分と点の距離を求めているのか知っていれば教えていただきたいです。あとその何かの座標位置とは何の座標位置なのか教えて下さい。
ちなみにprintfDxを%lf(double型)でpt.xを調べてみたところ二桁のマイナスの数値から400くらいまでのランダム(?)な数が出てきました。

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