【计算几何-点的定位】
程序员文章站
2022-04-02 09:37:01
...
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;
}