这是一个纯解析几何的题目,不是有一个直线外一点到直线的距离公式吗?是的,不过在GDI的领域,不需要这样去考虑问题,不需要考虑直一方程,我们直接可以从坐标对上着手。
struct CGeoXY
{
double dx,dy;
};
/*参数说明
pXY是一条直线的所有坐标对数组
nPointCount是数组中的点数
dx,dy是要计算的点
dOffset 是偏移量,即dx,dy与直线的距离差< dOffset 即可判断为在直线上。
*/
bool isPtAtLine(CGeoXY* pXY, int nPointCount,double dx,double dy,double dOffset)
{
double dx1,dy1,dx2,dy2;
double dA1,dA2;
for (int i = 0;i < nPointCount - 1;i++){
dx1 = pXY[i].dx;
dy1 = pXY[i].dy;
dx2 = pXY[i + 1].dx;
dy2 = pXY[i + 1].dy;
if (isPtInRect(dx,dy,dx1,dy1,dx2,dy2)){
dA1 = getDirection(dx1,dy1,dx,dy);
dA2 = getDirection(dx1,dy1,dx2,dy2);
if (abs(sin(dA1 - dA2) * getDistance(dx1,dy1,dx,dy)) < dOffset){