#include "Lin_geometric_fun.h"
#ifdef __cplusplus
extern "C" {
#endif
/****************************************************************************
//------------alg 3------------
****************************************************************************/
static double determinant(double v1, double v2, double v3, double v4) // 行列式
{
return (v1*v3-v2*v4);
}
// 判断两条线段是否相交(三种算法)
// 2016年12月15日
//取了三种方法中最快的一种
extern bool intersect3(Point aa, Point bb, Point cc, Point dd)
{
double delta = determinant(bb.x-aa.x, cc.x-dd.x, bb.y-aa.y, cc.y-dd.y);
if ( delta<=(1e-6) && delta>=-(1e-6) ) // delta=0,表示两线段重合或平行
{
return false;
}
double namenda = determinant(cc.x-aa.x, cc.x-dd.x, cc.y-aa.y, cc.y-dd.y) / delta;
if ( namenda>1 || namenda<0 )
{
return false;
}
double miu = determinant(bb.x-aa.x, cc.x-aa.x, bb.y-aa.y, cc.y-aa.y) / delta;
if ( miu>1 || miu<0 )
{
return false;
}
return true;
}
///------------alg 3------------
extern double get_two_point_dist(double a[3],double b[3])//返回两点距离
{
double dist;
dist=sqrt((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])+(a[2]-b[2])*(a[2]-b[2]));
return dist;
}
#ifdef __cplusplus
}
#endif
UG二次开发之几何数学的相关函数!
于 2023-08-30 16:46:23 首次发布