当前位置:首页 » 编程语言 » c语言判断点

c语言判断点

发布时间: 2022-04-27 00:17:28

1. 帮我编一个判断点在三角形内的c语言程序

如果不用向量的方法,可以用凸多边形理论求解。

设三角形的三顶点为A、B、C,现有点P(点P不是点A、B、C),过A、P两点作直线交BC所在直线于点D,若点D位于线段BC上,则点P一定位于该三角形内。代码如下:

#include<stdio.h>

#include"math.h"

#defineDBL_MIN2.2250738585072014e-308

structPoint{/*(x,y)*/

doublex;

doubley;

};

structLine{/*a*x+b*y=c*/

doublea;

doubleb;

doublec;

};

structTriangle{

structPointA;

structPointB;

structPointC;

};

structLinecreateLine(structPointp1,structPointp2){

structLineline;

line.a=p1.y-p2.y;

line.b=p2.x-p1.x;

line.c=p1.x*(p1.y-p2.y)+p1.y*(p2.x-p1.x);

returnline;

}

intisInTriangle(structTriangle*tri,structPoint*P){

/*P落在三角形顶点上*/

if(((fabs(P->x-tri->A.x)<DBL_MIN&&fabs(P->y-tri->A.y)<DBL_MIN))

||((fabs(P->x-tri->B.x)<DBL_MIN&&fabs(P->y-tri->B.y)<DBL_MIN))

||((fabs(P->x-tri->C.x)<DBL_MIN&&fabs(P->y-tri->C.y)<DBL_MIN)))

return1;

structLineline1=createLine(tri->A,*P);

structLineline2=createLine(tri->B,tri->C);

structPointD;

if(fabs(line1.a*line2.b-line2.a*line1.b)>=DBL_MIN){/*不平行或不重合*/

D.x=(line2.b*line1.c-line1.b*line2.c)/(line1.a*line2.b-line2.a*line1.b);

D.y=(line1.a*line2.c-line2.a*line1.c)/(line1.a*line2.b-line2.a*line1.b);

if(((tri->B.x<=D.x&&D.x<=tri->C.x)||(tri->C.x<=D.x&&D.x<=tri->B.x))

&&((tri->B.y<=D.y&&D.y<=tri->C.y)||(tri->C.y<=D.y&&D.y<=tri->B.y)))

return1;

}

return0;

}

intisTriangle(structTriangletri){

doubleAB,BC,AC;

AB=sqrt((tri.A.x-tri.B.x)*(tri.A.x-tri.B.x)+(tri.A.y-tri.B.y)*(tri.A.y-tri.B.y));

BC=sqrt((tri.C.x-tri.B.x)*(tri.C.x-tri.B.x)+(tri.C.y-tri.B.y)*(tri.C.y-tri.B.y));

AC=sqrt((tri.A.x-tri.C.x)*(tri.A.x-tri.C.x)+(tri.A.y-tri.C.y)*(tri.A.y-tri.C.y));

if(AB+BC>AC&&BC+AC>AB&&AC+AB>BC)

return1;

else

return0;

}

intmain(intargc,char**argv){

structTriangletriangle={{-2,0},{2,3},{2,0}};//三角形

structPointpoints[]={{-1.999,0.0001},{0,0},{1,1},{2,3},{-1,2}};//测试点数组

if(isTriangle(triangle)){

inti;

for(i=0;i<5;i++){

if(isInTriangle(&triangle,&points[i]))

printf("点(%f,%f)在三角形内。 ",points[i].x,points[i].y);

else

printf("点(%f,%f)不在三角形内。 ",points[i].x,points[i].y);

}

}else

printf("不构成三角形! ");

return0;

}

运行结果:

2. C语言关于判断点在圆上。

float a,b;
scanf("%f,%f",&a,&b); //获取点坐标
if(abs(a*a+b*b-1)<0.001){
printf("点在圆上");
}
else{
printf("点不在圆上");
}

3. C语言里面的判断语句

在C语言中,判断语句的一般格式为

if(expr1)
{
//somecodes
}
elseif(expr2)
{
//somecodes
}
elseif(expr3)
...
else
{
//somecodes
}

//outofcheck

执行时,会依照书写顺序,依次判断各个expr,如果有一个为真,则执行后续的{}内语句,并不再执行后续判断,而是直接从out of check开始执行。


else if的数量不限,可以不存在,也可以有任意多组。

else同样可以不存在。

每个else 与最其之前最近的没有匹配else的if相结合。

判断执行的语句{}部分,大括号对可以省略,省略后,if仅对其下一语句生效。

4. C语言判断点是否在三角形内或外

#include<stdio.h>
#include<math.h>
struct point
{
double x;
double y;
};
int area(float m,float n,float t)
{
float p,S;
p=(m+n+t)/2;
S=sqrt(p*(p-m)*(p-n)*(p-t));
return S;
}
void main()
{
struct point a,b,c,d,p;
float AB,BC,AC;
float S0,S1,S2,S3;
float DA,DB,DC;
scanf("%lf,%lf\n",&a.x,&a.y);
scanf("%lf,%lf\n",&b.x,&b.y);
scanf("%lf,%lf\n",&c.x,&c.y);
AB=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
BC=sqrt((b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y));
AC=sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y));
if((AB+BC)>AC && (AB+AC)>BC && (AC+BC)>AB){
printf("请输入D点坐标:\n");
scanf("%lf,%lf\n",&d.x,&d.y);
DA=sqrt((d.x-a.x)*(d.x-a.x)+(d.y-a.y)+(d.y-a.y));
DB=sqrt((d.x-b.x)*(d.x-b.x)+(d.y-b.y)+(d.y-b.y));
DC=sqrt((d.x-c.x)*(d.x-c.x)+(d.y-c.y)+(d.y-c.y));
S0=area(AB,BC,AC);
S1=area(DA,DB,AB);
S2=area(DA,DC,AC);
S3=area(DB,DC,BC);
if(S1+S2+S3-S0==0)
printf("点D位于三角形内部\n");
else
printf("点D位于三角形外部\n");
}
else
printf("不能构成三角形!");
}
//看看这样可比可以。你这个题还有更简单的方法,试试把每个边当成直线段,然后用d点带入和0比较大小,就会很简单。

5. c语言编一个程序判断一个点是否在单位圆上,需要以小数点后三位为精度进行判断。

#include<stdio.h>
main()
{
floatx,y,x1,y1;//定义变量
while(1){//无限循环,多次输入输出
scanf("%f%f",&x1,&y1);//输入坐标
x=(float)((int)(x1*1000+0.5))/1000;//四舍五入取小数点后3位
y=(float)((int)(y1*1000+0.5))/1000;
if(x*x+y*y==1)//坐标判断
printf("坐标(%.3f,%.3f)在单位圆上! ",x,y);
else
printf("坐标(%.3f,%.3f)不在单位圆上! ",x,y);
}
}

如图所示,望采纳。。。。。。

6. c语言 判断三个点是不是在一条直线上 在线等 点自定

#include"stdafx.h"
#include<stdio.h>
#include<math.h>
intmain()
{
floatx1,x2,x3,y1,y2,y3;
scanf("(%f,%f) ",&x1,&y1);
scanf("(%f,%f) ",&x2,&y2);
scanf("(%f,%f)",&x3,&y3);
if((y1-y2)/(x1-x2)==(y2-y3)/(x2-x3))
printf("在同一直线上。 ");
elseprintf("不在同一直线上。 ");
return0;
}

举例:输入

(1,2)

(2,4)

(4,8)

7. C语言如何编判断点是否在圆上

//输入某个点A的平面坐标(x,y),判断(输出)A点是在圆内、圆外、还是在圆上,
//设这个圆的圆心是(a,b),半径为r。

#include <stdio.h>
main()
{ int x,y;
scanf("%d %d",x,y);
//如果点A(x,y)在圆内,则(x-a)*(x-a)+(y-b)*(y-b)<r
//如果点A(x,y)在圆上,则(x-a)*(x-a)+(y-b)*(y-b)=r
//如果点A(x,y)在圆外,则(x-a)*(x-a)+(y-b)*(y-b)>r
if(x-a)*(x-a)+(y-b)*(y-b)<r)
printf("点A在圆内");
else if(x-a)*(x-a)+(y-b)*(y-b)=r)
printf("点A在圆上");
elst if(x-a)*(x-a)+(y-b)*(y-b)>r)
printf("点A在圆外");
}

8. 怎么编一个判断点在三角形内的C语言程序

以下代码定义了三个函数:

point:定义点的位置,

area:定义三角形的大小

main:主程序,通过调用point,area函数判断点是否在三角形内

#include<stdio.h>
#include<math.h>
structpoint
{
doublex;
doubley;
};
intarea(floatm,floatn,floatt)
{
floatp,S;
p=(m+n+t)/2;
S=sqrt(p*(p-m)*(p-n)*(p-t));
returnS;
}
voidmain()
{
structpointa,b,c,d,p;
floatAB,BC,AC;
floatS0,S1,S2,S3;
floatDA,DB,DC;
scanf("%lf,%lf ",&a.x,&a.y);
scanf("%lf,%lf ",&b.x,&b.y);
scanf("%lf,%lf ",&c.x,&c.y);
AB=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
BC=sqrt((b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y));
AC=sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y));
if((AB+BC)>AC&&(AB+AC)>BC&&(AC+BC)>AB){
printf("请输入D点坐标: ");
scanf("%lf,%lf ",&d.x,&d.y);
DA=sqrt((d.x-a.x)*(d.x-a.x)+(d.y-a.y)+(d.y-a.y));
DB=sqrt((d.x-b.x)*(d.x-b.x)+(d.y-b.y)+(d.y-b.y));
DC=sqrt((d.x-c.x)*(d.x-c.x)+(d.y-c.y)+(d.y-c.y));
S0=area(AB,BC,AC);
S1=area(DA,DB,AB);
S2=area(DA,DC,AC);
S3=area(DB,DC,BC);
if(S1+S2+S3-S0==0)
printf("点D位于三角形内部 ");
else
printf("点D位于三角形外部 ");
}
else
printf("不能构成三角形!");
}

9. C语言 判断点在第几象限

#include <stdio.h>
int main()
{ int x,y;
scanf("%d%d",&x,&y); //输入(x,y)点
if(x>0&&y>0) printf("第一象限");
if(x>0&&y<0) printf("第四象限");
if(x<0&&y>0) printf("第二象限");
if(x<0&&y<0) printf("第三象限");

}

热点内容
选举源码 发布:2025-05-16 09:58:59 浏览:747
超级访问陈小春应采儿 发布:2025-05-16 09:43:29 浏览:478
缓存视频合并工具最新版 发布:2025-05-16 09:35:03 浏览:194
花雨庭服务器ip地址和端口 发布:2025-05-16 09:34:58 浏览:239
同时修改多台服务器管理地址工具 发布:2025-05-16 09:20:36 浏览:421
什么配置就能玩地平线 发布:2025-05-16 09:13:46 浏览:82
python旋转图片 发布:2025-05-16 09:13:40 浏览:638
少女前线防检测脚本 发布:2025-05-16 08:59:07 浏览:728
编译器对系统的依赖 发布:2025-05-16 08:37:29 浏览:711
javamap数组 发布:2025-05-16 08:37:28 浏览:451