【计算几何-点的定位】

来源:互联网 发布:mac适用的办公软件 编辑:程序博客网 时间:2024/06/05 16:03

1.二维坐标系,输入点的坐标(xi, yi),判断点是否在三角形内
判断原理:若点p在三角形内,Sabc = Spab + Spac + Spbc;

struct point{/*记录点的信息*/    double x;    double y;};struct v{/*记录边的信息*/    point star;/*边的起点*/    point en;/*边的终点*/};struct triangle{/*记录三角形信息*/    point A;/*三角形的顶点A*/    point B;/*三角形的顶点B*/    point C;/*三角形的顶点C*/};triangle tre[104];int tr;double crossProduct(v * v1, v * v2);/*向量叉积*/bool inTrianle(triangle t, point P);/*判断点是否在三角形内*/double crossProduct(v * v1, v * v2){    v vt1, vt2;    double result = 0;    vt1.star.x = 0;    vt1.star.y = 0;    vt1.en.x = v1->en.x - v1->star.x;    vt1.en.y = v1->en.y - v1->star.y;    vt2.star.x = 0;    vt2.star.y = 0;    vt2.en.x = v2->en.x - v2->star.x;    vt2.en.y = v2->en.y - v2->star.y;    result = vt1.en.x * vt2.en.y - vt2.en.x * vt1.en.y;    return result;}bool inTrianle(triangle t, point p){    v AB, AC, BC, PA, PB, PC;    AB.star = t.A;    AB.en = t.B;    AC.star = t.A;    AC.en = t.C;    BC.star = t.B;    BC.en = t.C;    PA.star = p;    PA.en = t.A;    PB.star = p;    PB.en = t.B;    PC.star = p;    PC.en = t.C;    double Sabc = fabs(crossProduct(&AB, &AC));    double Spab = fabs(crossProduct(&PA, &PB));    double Spac = fabs(crossProduct(&PA, &PC));    double Spbc = fabs(crossProduct(&PB, &PC));    if(Sabc == Spab + Spac + Spbc)        return true;    else        return false;}

2.二维坐标系,输入点坐标(xi, yi),判断点是否在圆内
判断原理:若点在圆内,则点到圆心的距离小于等于半径

struct circle{    int x;/*圆心的横坐标*/    int y;/*圆心的纵坐标*/    int r;/*圆的半径*/};circle cir[104];int ci;bool inCircle(circle t, int x, int y);/*判断点是否在圆内*/bool inCircle(circle t, int x, int y){    int ans = (x-t.x)*(x-t.x) + (y-t.y)*(y-t.y);    if(ans <= t.r*t.r)        return true;    else        return false;}