int on_a_line(double ax,double ay,double bx,double by,double cx,double cy) { double dx1,dy1,dx2,dy2上述代码能证明 闪电共线 #include #define DELTA 1e-9int on_a_line(double ax,double ay,double bx,double by,double cx,double cy){double dx1,dy1

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 09:54:23

int on_a_line(double ax,double ay,double bx,double by,double cx,double cy) { double dx1,dy1,dx2,dy2上述代码能证明 闪电共线 #include #define DELTA 1e-9int on_a_line(double ax,double ay,double bx,double by,double cx,double cy){double dx1,dy1
int on_a_line(double ax,double ay,double bx,double by,double cx,double cy) { double dx1,dy1,dx2,dy2
上述代码能证明 闪电共线
#include
#define DELTA 1e-9
int on_a_line(double ax,double ay,double bx,double by,double cx,double cy)
{
double dx1,dy1,dx2,dy2,res;
dx1=bx-ax;dy1=by-ay;dx2=cx-bx;dy2=cy-by;res=dx1*dy2-dy2*dx1;
return res-DELTA;
}
int same(double p1x,double p1y,double p2x,double p2y,double ax,double ay,double bx,double by)
{
double dx,dy,dx1,dy1,dx2,dy2,res;
dx=bx-ax;dy=by-ay;dx1=p1x-ax;dy1=p1y-ay;dx2=p2x-bx;dy2=p2y-by;res=(dx*dy1-dy*dx1)*(dx*dy2-dy*dx2);
return res>0;
}
int main(){
double px,py,ax,ay,bx,by,cx,cy;
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&px,&py,&ax,&ay,&bx,&by,&cx,&cy);
if(on_a_line(ax,ay,bx,by,cx,cy)) printf("delegate\n"); else if(!same(px,py,ax,ay,bx,by,cx,cy)||!same(px,py,bx,by,ax,ay,cx,cy)||!same(px,py,cx,cy,ax,ay,bx,by)) printf("out\n");
else if(on_a_line(px,py,bx,by,cx,cy)||on_a_line(px,py,ax,ay,cx,cy)||on_a_line(px,py,ax,ay,bx,by)) printf("on\n");
else printf("in\n");
return 0;
}

int on_a_line(double ax,double ay,double bx,double by,double cx,double cy) { double dx1,dy1,dx2,dy2上述代码能证明 闪电共线 #include #define DELTA 1e-9int on_a_line(double ax,double ay,double bx,double by,double cx,double cy){double dx1,dy1
能.
这里用到数学上的一个证明方法:
若p1,p2,p3为平面上的三点,则三点共线的充要条件为向量:P1XP2=0,其中P1=p1-p2,P2=p2-p3.具体请参考相关数学教材.
至于return语句为什么不返回res==0,这里主要涉及到程序所要求的精度问题,该程序认定只要res落在(-DELTA,DELTA)之间即认为res==0
而外,在判定上顺序有点不对,应该改成:
if(on_a_line(ax,ay,bx,by,cx,cy))
printf("delegate\n");
else if(on_a_line(px,py,bx,by,cx,cy)||on_a_line(px,py,ax,ay,cx,cy)||on_a_line(px,py,ax,ay,bx,by))
printf("on\n");
else if(same(px,py,ax,ay,bx,by,cx,cy)&&same(px,py,bx,by,ax,ay,cx,cy)&&same(px,py,cx,cy,ax,ay,bx,by))
printf("out\n");
else printf("in\n");
}
这样做的内在逻辑可以自己想下,不多说
还要注意的是,你的on的判断还包括这样的情况:点p在三点构成的线段或线段的延长线上该判定都为真.这里是需要重新加强条件判定的.

int on_a_line(double ax,double ay,double bx,double by,double cx,double cy) { double dx1,dy1,dx2,dy2上述代码能证明 闪电共线 #include #define DELTA 1e-9int on_a_line(double ax,double ay,double bx,double by,double cx,double cy){double dx1,dy1 double fun(int i,double x,double #includeusing namespace std;#define PI 314159double area(double radius=0);double area(double a,double b);double area(double a,double b,double h);double area(double a,double b,double c,int);int main(){cout #include stdio.h double fun(int m) { // } 函数声明:double gauss_ch2(double(*f)(double),int n) 这里的double(*f)(double)是什么意思?传入什么? 以下函数的正确定义形式是( )A double fun(int x,int y) B.double fun(int x;int y) C.double fun(int x,int y); D.double fun(int x,y); 8、以下正确的函数定义是A)double fun(int x ,int y) B)double fun(int x ; int y)C)double fun(int x ,int y) ; D)double fun(int x,y) 以下正确的函数定义形式是?A.double fun(int x,int y) B.double fun(int x;int y) C.double fun(int x,int y) D.double fun(int x,y) double f(double x); {double a=0;int i; for (i=0;i #include double fun( int m ){double t = 1.0;int i;for( i = 2; i 哪位高手帮忙看下二分法解方程哪里出错了#include #include #include #include int n; double c[16]; double Func(double); int BisectRoot(double,double,double,double,double *,int,int *); int main() { int i,m; double a,b,h,eps,*x; prin 若有以下函数首部int fun(double x[10],int *n)则下面针对此函数的函数声明语句中正确的是 .A)int fun(double x,int *n); B)int fun(double,int);C)int fun(double *x,int n); D)int fun(double *,int*);如果答案没错的话 若有以下函数首部 int fun(double x[10],int *n) 则下面针对此函数的函数声明语句中正确的是()A int fun(double x,int*n);B int fun(double ,int );C int fun(double*x,int n);D int fun(double * ,int *);答案是C为什么不是D, operator=是什么意思啊# include double sum(double a,double b);double subtract(double a,double b);double divide(double a,double b);double multiply(double a,double b);main(){int choice;char operator;double a,b;double (*func)();printf( * * * * * #includeusing namespace std;double tiaohe (double,double);int main(){double x,y;coutx>>y&&x*y!=0) {double t_tiaohe=tiaohe(x,y);cout 在C语言中Int和double怎么转换? C语言中的float.double.int…怎样理解啊? 关于int和double函数的特性和差别,