トップページ > 空即是色 > 2006年の記事 > 線分交差判定その2
空即是色 線分交差判定その2
2006年 02月24日
前回に引き続き、実装。
曲線を適当に線分で分割/近似して交差判定→交点算出している。
線分の交差判定。
(x1,y1)(x2,y2)を結ぶ線分と(x3,y3)(x4,y4)を結ぶ線分の交差を判定する。
inline bool isHitSegments(
float x1, float y1,
float x2, float y2,
float x3, float y3,
float x4, float y4
){
if( ( (x1-x2)*(y3-y1)+(y1-y2)*(x1-x3) ) *
( (x1-x2)*(y4-y1)+(y1-y2)*(x1-x4) ) < 0 ){
if( ( (x3-x4)*(y1-y3)+(y3-y4)*(x3-x1) ) *
( (x3-x4)*(y2-y3)+(y3-y4)*(x3-x2) ) < 0 ){
return true;
}
}
return false;
}
交点の算出。
(x1,y1)(x2,y2)を結ぶ線分と(x3,y3)(x4,y4)を結ぶ線分の交点を算出する。
inline void calcIntersection(
float x1, float y1,
float x2, float y2,
float x3, float y3,
float x4, float y4,
float* v
){
float x, y;
float a1, b1, c1, a2, b2, c2;
a1 = y1-y2;
b1 = x2-x1;
c1 = x1*y2 - x2*y1;
a2 = y3-y4;
b2 = x4-x3;
c2 = x3*y4 - x4*y3;
x = (b1*c2 - b2*c1) / (a1*b2 - a2*b1);
y = (a1*c2 - a2*c1) / (a2*b1 - a1*b2);
v[0] = x;
v[1] = y;
}
トラックバック
この記事のトラックバックURL:http://null-null.net/mt/mt-tb.cgi/419


