c語言判斷點
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語言 判斷點在第幾象限