|
发表于 2004-2-10 10:27:00
|
显示全部楼层
Re:图形学问题,各位看看我错在哪里??高手帮忙修改一
?你段我HoHo引擎?面的代?片?啵?M?δ阌?椭?
struct LIBRARY_BASE_API tag_msLine
{
float fBeginX, fBeginY;
float fEndX, fEndY;
float fK;
};
typedef tag_msLine* LP_MS_LINE;
typedef tag_msLine MS_LINE;
// 交换两个浮点数,大->小排列
void msMax2Min( float* fA, float* fB )
{
if( *fA < *fB )
{
float temp = *fA;
*fA = *fB;
*fB = temp;
}
}
// 获取相交的坐标点
// 两条线段Line1 & Line2 计算其交点,并返回为参数指针x,y
// 若没有交点,函式返回false
bool msGetX( LP_MS_LINE pLine1, LP_MS_LINE pLine2, float* x, float* y )
{
// 获取两线交点
*x = ( pLine2->fK * pLine2->fBeginX - pLine1->fK * pLine1->fBeginX + pLine1->fBeginY - pLine2->fBeginY ) / ( pLine2->fK - pLine1->fK );
*y = pLine1->fK * ( *x - pLine1->fBeginX ) + pLine1->fBeginY;
// 坐标排序,以便于后面计算
MS_LINE Line1, Line2;
Line1.fBeginX = pLine1->fBeginX;
Line1.fBeginY = pLine1->fBeginY;
Line1.fEndX = pLine1->fEndX;
Line1.fEndY = pLine1->fEndY;
Line2.fBeginX = pLine2->fBeginX;
Line2.fBeginY = pLine2->fBeginY;
Line2.fEndX = pLine2->fEndX;
Line2.fEndY = pLine2->fEndY;
msMax2Min( &Line1.fEndX, &Line1.fBeginX );
msMax2Min( &Line1.fEndY, &Line1.fBeginY );
msMax2Min( &Line2.fEndX, &Line2.fBeginX );
msMax2Min( &Line2.fEndY, &Line2.fBeginY );
// 判定交点是否在线段内
if( *x > Line1.fBeginX && *x < Line1.fEndX && *y > Line1.fBeginY && *y < Line1.fEndY )
if( *x > Line2.fBeginX && *x < Line2.fEndX && *y > Line2.fBeginY && *y < Line2.fEndY )
return true;
return false;
}
|
|