トップページ > 空即是色 > 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