幅のある二つの線分の衝突判定
Posted: 2013年3月07日(木) 17:04
はじめまして。坂本龍というものです。現在、マウスを用いたシューティング風のゲームを作成しております。
件名にもございますが、「幅のある二つの線分の衝突判定」をC言語でおこなう方法について、質問しに参りました。
ネットで検索いたしましたが、通常の線分交差判定のアルゴリズムはいくつか見つけられたものの、それらを「幅のある線分」に応用したアルゴリズムは見つけられませんでした。
また、そのようなアルゴリズムを自作する能力も、私にはございません。
もしご存知の方がいらっしゃいましたら、そのアルゴリズムをC言語でお教えください。
引数は、double型の4つのX・Y座標と、double型の2つの幅値(半径)としてくださると助かります。
(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4,double width1,double width2 など)
求めている判定を添付画像で示しておりますので、そちらをご参照の上、画像のとおりの判定が可能なアルゴリズムをお願いします。
なお、参考までに、この掲示板に掲載されていたアルゴリズムをもとに作成し、現在私が使用している「円と幅のある線分の衝突判定」のプログラムを示しておきます。
int segment_collision_detection(double x1,double y1,double x2,double y2,double width,double px,double py,double prange){
double dx=x2-x1;
double dy=y2-y1;
double x=x1-px;
double y=y1-py;
double a=(dx*dx+dy*dy);
width+=prange;
if(a==0.0)return (x*x+y*y<width*width);
double t=-(dx*x+dy*y)/a;
if(t<0.0)t=0.0;
if(t>1.0)t=1.0;
x+=t*dx;
y+=t*dy;
return (x*x+y*y<width*width);
}
件名にもございますが、「幅のある二つの線分の衝突判定」をC言語でおこなう方法について、質問しに参りました。
ネットで検索いたしましたが、通常の線分交差判定のアルゴリズムはいくつか見つけられたものの、それらを「幅のある線分」に応用したアルゴリズムは見つけられませんでした。
また、そのようなアルゴリズムを自作する能力も、私にはございません。
もしご存知の方がいらっしゃいましたら、そのアルゴリズムをC言語でお教えください。
引数は、double型の4つのX・Y座標と、double型の2つの幅値(半径)としてくださると助かります。
(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4,double width1,double width2 など)
求めている判定を添付画像で示しておりますので、そちらをご参照の上、画像のとおりの判定が可能なアルゴリズムをお願いします。
なお、参考までに、この掲示板に掲載されていたアルゴリズムをもとに作成し、現在私が使用している「円と幅のある線分の衝突判定」のプログラムを示しておきます。
int segment_collision_detection(double x1,double y1,double x2,double y2,double width,double px,double py,double prange){
double dx=x2-x1;
double dy=y2-y1;
double x=x1-px;
double y=y1-py;
double a=(dx*dx+dy*dy);
width+=prange;
if(a==0.0)return (x*x+y*y<width*width);
double t=-(dx*x+dy*y)/a;
if(t<0.0)t=0.0;
if(t>1.0)t=1.0;
x+=t*dx;
y+=t*dy;
return (x*x+y*y<width*width);
}