common_tool.cpp 1.18 KB
#include "common_tool.h"


namespace common {

	bool is_intersect(jxline myline1, jxline myline2)
    {
        // 快速排斥实验
        if (myline1.get_max_x() < myline2.get_min_x() ||
            myline2.get_max_x() < myline1.get_min_x() ||
            myline1.get_max_y() < myline2.get_min_y() ||
            myline2.get_max_y() < myline1.get_min_y())
            return false;

        // 跨立实验(叉积异号)
        if (((((float)myline1.xa - (float)myline2.xa)*((float)myline2.yb - (float)myline2.ya) - ((float)myline1.ya - (float)myline2.ya)*((float)myline2.xb - (float)myline2.xa))*
            (((float)myline1.xb - (float)myline2.xa)*((float)myline2.yb - (float)myline2.ya) - ((float)myline1.yb - (float)myline2.ya)*((float)myline2.xb - (float)myline2.xa))) > 0 ||
            ((((float)myline2.xa - (float)myline1.xa)*((float)myline1.yb - (float)myline1.ya) - ((float)myline2.ya - (float)myline1.ya)*((float)myline1.xb - (float)myline1.xa))*
            (((float)myline2.xb - (float)myline1.xa)*((float)myline1.yb - (float)myline1.ya) - ((float)myline2.yb - (float)myline1.ya)*((float)myline1.xb - (float)myline1.xa))) > 0)  
            return false;

        return true;
    }
}