線分が交差しているかどうかを判断し、交点を求める方法.
15080 ワード
証明するなら私が貼った大物のブログを見ればいいです.私のコードは具体的に何をしているのか、それらのブログは証明しただけで、彼らのコードには注釈がありません.線分が交差するか否かを判断する: 大物の張り紙を貼るhttps://segmentfault.com/a/1190000004070478
次に、2つの判断があります.まず、矩行が交差しているかどうかを判断し、線分が交差しているかどうかを判断します.更にどのように交点を計算します:更に貼りますhttps://blog.csdn.net/Mr_HCW/article/details/82856056
struct Point{
double x, y;
}p1, p2, q1, q2; //
max min double :
double max(double a, double b){
return a>b?a:b;
}
double min(double a, double b){
return a<b?a:b;
}
:
double chengji(double x1, double y1, double x2, double y2){
return x1*y2 - y1*x2;
}
次に、2つの判断があります.まず、矩行が交差しているかどうかを判断し、線分が交差しているかどうかを判断します.
:
bool jujiao(){
if(min(p1.x, p2.x) <= max(q1.x, q2.x)
& min(q1.x, q2.x) <= max(p1.x, p2.x)
& min(p1.y, p2.y) <= max(q1.y, q2.y)
& min(q1.y, q2.y) <= max(p1.y, p2.y)
)return 1;
return 0;
}
:
bool xianjiao(){
if(chengji(p2.x - p1.x, p2.y - p1.y, q1.x-p1.x, q1.y-p1.y) * chengji(p2.x - p1.x, p2.y - p1.y, q2.x-p1.x, q2.y-p1.y) <= 0
&& chengji(q2.x - q1.x, q2.y - q1.y, p1.x-q1.x, p1.y-q1.y) * chengji(q2.x - q1.x, q2.y - q1.y, p2.x-q1.x, p2.y-q1.y) <= 0)
return 1;
return 0;
}
:
double length(Point a, Point b){
double sum1 = abs(b.x-a.x);
double sum2 = abs(b.y-a.y);
return sqrt(sum1*sum1 + sum2*sum2);
}
:
double d1 = abs(chengji(q1.x-p1.x, q1.y-p1.y, p2.x-p1.x, p2.y-p1.y))/length(p2.x-p1.x, p2.y-p1.y);
double d2 = abs(chengji(q2.x-p1.x, q2.y-p1.y, p2.x-p1.x, p2.y-p1.y))/length(p2.x-p1.x, p2.y-p1.y);
p1 p1p2 :
dobule k = d1/(d1+d2);
p1 :
cx = k * (p2.x-p1.x);
cy = k * (p2.y-p1.y);
p1 :
Point o = {p1.x + cx, p1.y + cy};