1、非完整的代码,可能您无法看懂。仅作参考
2、具体代码实现如下:内部亦含有参考坐标零点,A点到B点顺时针还是逆时针的判断。
int patch_area_cmp(str_patch_area_line *pdata)
{//0内1外2上
unsigned int i , k1, k2;
int m;
int Xtimes = 0;
double x1,y1,x2,y2;
if((pdata->flag != 1)||(pdata->num < 1))
return -1;
for(i = 0 ; i < pdata->num ; i++)
{
k1 = 0 ; k2 = 0;
x1 = pdata->xy[i].x1;
y1 = pdata->xy[i].y1;
if(i == (pdata->num - 1))
{
x2 = pdata->xy[0].x1;
y2 = pdata->xy[0].y1;
}
else
{
x2 = pdata->xy[i + 1].x1;
y2 = pdata->xy[i + 1].y1;
}
printf("for tes : %d , %f %f , %f %f\n" , i,x1,y1,x2,y2);
if((y1 > 0)||((y1 == 0)&&(x1 > 0)))
k1 = 1;
if((y2 > 0)||((y2 == 0)&&(x2 > 0)))
k2 = 1;
if(k1 == k2)
continue;
m = (x1 * y2) - (y1 * x2);//正逆负顺0线
if(m > 0)
Xtimes--;
else if(m < 0)
Xtimes++;
else
return 2;
printf("111:%d , %d , %d\n" , i , Xtimes , m);
}
if((Xtimes == 2)||(Xtimes == -2))
return 0;
return 1;
}
int patch_area_chick(double x_lo , double y_la , str_patch_area *pdata)
{//0内1外
int i , k;
str_patch_area_line temp;
if(pdata->flag != 1)
{
printf("str_patch_area data flag != 1\n");
return -1;
}
for(i = 0 ; i < Max_patch_area ; i++)
{
if(pdata->line[i].flag != 1)
continue;
patch_area_trans(x_lo , y_la , &temp , &pdata->line[i]);
k = patch_area_cmp(&temp);
if(k == 0)
break;
}
if(i >= Max_patch_area)
return 1;
return 0;
}