c语言三角形判断坐标,用C语言判断点与三角形的位置关系

用C语言判断点与三角形的位置关系

用C语言判断点与三角形的位置关系

Description

读入一点的坐标和三角形的顶点坐标,判断该点在三角形内,在三角形边界上,还是在边界之外.

Input

4个点坐标,每个一行.

Output

点在三角形内,输出In

点在三角形边上,输出On

点在三角形外,输出Out

Sample Input

0 0

-1 0

1 0

0 1

Sample Output

On

*

*

*

这道题我做的是

#include

#include

main()

{

double Dx,Dy,Ax,Ay,Bx,By,Cx,Cy,p,p1,p2,p3,AB,AC,BC,DA,DB,DC,Sabc,Sabcd;

scanf("%d%d",&Dx,&Dy);

scanf("%d%d",&Ax,&Ay);

scanf("%d%d",&Bx,&By);

scanf("%d%d",&Cx,&Cy);

AB=sqrt((Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By));

BC=sqrt((Cx-Bx)*(Cx-Bx)+(Cy-By)*(Cy-By));

AC=sqrt((Ax-Cx)*(Ax-Cx)+(Ay-Cy)*(Ay-Cy));

DA=sqrt((Ax-Dx)*(Ax-Dx)+(Ay-Dy)*(Ay-Dy));

DB=sqrt((Bx-Dx)*(Bx-Dx)+(By-Dy)*(By-Dy));

DC=sqrt((Bx-Dx)*(Bx-Dx)+(By-Dy)*(By-Dy));

p=(AB+BC+AC)/2;

p1=(AC+DC+DA)/2;

p2=(AB+DB+DA)/2;

p3=(BC+DC+DB)/2;

Sabc=sqrt(p*(p-AB)*(p-BC)*(p-AC));

Sabcd=sqrt(p1*(p1-AC)*(p1-DC)*(p1-DA))+sqrt(p2*(p2-AB)*(p2-DB)*(p2-DA))+sqrt(p3*(p3-BC)*(p3-DC)*(p3-DB));

if((Dy-Cy)*(Ax-Cx)==(Dx-Cx)*(Ay-Cy)||(Dy-Cy)*(Bx-Cx)==(Dx-Cx)*(By-Cy)||(Dy-Ay)*(Bx-Ax)==(Dx-Ax)*(By-Ay))

{

if(abs(Sabcd,Sabc)

1年前

已收到1个回答

判断一个三角形位置关系计算几何中的一个常见问题。我们可以使用向量叉积的方法来判断三角形位置关系。以下是使用C语言实现的一个示例代码: ```c #include <stdio.h> // 定义一个结构体 typedef struct { double x; double y; } Point; // 计算向量叉积 double crossProduct(Point a, Point b, Point c) { double abx = b.x - a.x; double aby = b.y - a.y; double acx = c.x - a.x; double acy = c.y - a.y; return abx * acy - aby * acx; } // 判断三角形位置关系 int pointTriangleRelation(Point p, Point a, Point b, Point c) { double cross1 = crossProduct(a, b, p); double cross2 = crossProduct(b, c, p); double cross3 = crossProduct(c, a, p); if ((cross1 > 0 && cross2 > 0 && cross3 > 0) || (cross1 < 0 && cross2 < 0 && cross3 < 0)) { return 1; // 三角形内部 } else if (cross1 == 0 || cross2 == 0 || cross3 == 0) { return 0; // 三角形的边上 } else { return -1; // 三角形外部 } } int main() { Point p, a, b, c; printf("请输入坐标 (x y): "); scanf("%lf %lf", &p.x, &p.y); printf("请输入三角形的三个顶坐标 (x1 y1 x2 y2 x3 y3): "); scanf("%lf %lf %lf %lf %lf %lf", &a.x, &a.y, &b.x, &b.y, &c.x, &c.y); int result = pointTriangleRelation(p, a, b, c); if (result == 1) { printf("三角形内部\n"); } else if (result == 0) { printf("三角形的边上\n"); } else { printf("三角形外部\n"); } return 0; } ``` 这个程序首先定义了一个结构体 `Point`,然后实现了向量叉积的计算函数 `crossProduct`。接着,通过 `pointTriangleRelation` 函数来判断三角形位置关系: 1. 如果三角形的三个顶的叉积符号相同,则位于三角形内部。 2. 如果其中任意一个叉积为零,则位于三角形的边上。 3. 否则,位于三角形外部。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值