//Description: 求任意一点是否在三角形内部
#include <stdio.h>
#include <math.h>
struct point{
double x;
double y;
};
double getArea(point A, point B, point C) { // 求面积
double a = sqrt((B.y-C.y)*(B.y-C.y) + (B.x-C.x)*(B.x-C.x));
double c = sqrt((A.x-B.x)*(A.x-B.x) + (A.y-B.y)*(A.y-B.y));
double b = sqrt((A.x-C.x)*(A.x-C.x) + (A.y-C.y)*(A.y-C.y));
double p = (a + b + c) / 2;
return sqrt(p*(p-a)*(p-b)*(p-c)); //海伦公式 S=根号{[p(p-a)(p-b)(p-c)]} 其中p=(a+b+c)/2,abc为三角形三边长.
return 0;
}
int main() {
point a[3] = {{1,2},{2,4},{3,3}}; // 三角形的三个顶点
double tan1 = (a[2].y-a[1].y)/(a[2].x-a[1].x);
double tan2 = (a[3].y-a[2].y)/(a[3].x-a[2].x);
if(tan1 - tan2 < 0.000001) { // 判断斜率
printf("不能组成三角形\n");
return -1;
}
point b = {2.5,3}; // b点 是要判断的点
double s = getArea(a[1],a[2],a[3]); // S 三角形的面积
double s1 = getArea(a[1],a[2],b); // s1,s2,s3 任意两个顶点与b点组成的面积
double s2 = getArea(a[1],b,a[3]);
double s3 = getArea(b,a[2],a[3]);
if(s - s1 - s2 - s3 <=0.000001) {
printf("在三角形内部\n");
}
else {
printf("在三角形外部\n");
}
return 0;
}
求任意一点是否在三角形内部
最新推荐文章于 2021-12-19 13:49:14 发布
本文介绍了一种通过计算面积来判断一个点是否位于由三个顶点定义的三角形内部的方法,并提供了完整的C语言实现代码。
2964

被折叠的 条评论
为什么被折叠?



