求任意一点是否在三角形内部

本文介绍了一种通过计算面积来判断一个点是否位于由三个顶点定义的三角形内部的方法,并提供了完整的C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值