已知一点和一三角形的三点坐标,判断其位置关系(VB,C皆可)

来源:百度知道 编辑:UC知道 时间:2024/06/05 08:05:16
在三角形上,内,外~代码!
可运行就行,发到我的邮箱里littersheep23@sina.com不要把程序写在下面,是作业不希望有人抄袭~谢谢
要完整的代码,无关的人员请不要随便发言,我拿分换的,不希望别人抄怎么了?
分是给那些付出同等劳动的人的,我的分也是自己赚的,我又没犯法!
代码一定要完整的,思路我有好多种,只是不会把它编成代码,所以上来请教高手~
只要能运行就行的 ,没有特别要求。

代码已发

未考虑除零错的,即计算斜率时除数为零的情况

人家的代码也不希望你抄袭。

其实思路很简单:
设三角形顶点为ABC,则:
P在ABC外部 当且仅当P与A在直线BC异侧或P与B在直线AC异侧或P与C在直线AB异侧
否则 P在ABC上 当且仅当P在直线BC上或直线AC上或直线AB上
否则 P就在ABC内了

判断是否同侧的方法课本上应该有,自己推也不费时间,从略
注意一些退化的情况

#include <stdio.h>
#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&&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);