码蹄集(在线编程–第五期)— 三角形
前言
三角形
**题目**:输入三角形的三个顶点坐标,和点N的坐标。判断N是否位于三角形内,输出YES或者NO。此题里,若点在三角形的三条边上,也当成是在内部的情况进行判定。
输入格式:第一行输入三角形的三个顶点坐标(x1, y1) ,(x2, y2)和(x3, y3),第二行输入点N的坐标,整型,空格分隔。
输出格式:输出YES或者NO
样例1
输入:0 0 20 0 10 30
10 15
输出: YES
一、如何判断点在三角形内部?
三角形ABC和一点P,三角形的三个顶点坐标A(x1, y1) ,B(x2, y2)和C(x3, y3),P(x,y)。
(因为是个小白中的小白,就先用手写的代替了嗷~)
代码如下(示例):
#include
int main()
{
int x1,y1,x2,y2,x3,y3,x,y;
double u,v;
scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x,&y);
v=((y-y1)*(x3-x1)-(y3-y1)*(x-x1))/((y2-y1)*(x3-x1)-(y3-y1)*(x2-x1));
u=(x-x1-v*(x2-x1))/(x3-x1);
if((u>=0&&u<=1)&&(v>=0&&v<=1)&&(u+v<=1))
printf("YES");
else
printf("NO");
return 0;
}
总结
重要的是公式:AP=uAC+vAB(大写是向量,小写是数字)
还有u,v的条件:(u>=0&&u<=1)&&(v>=0&&v<=1)&&(u+v<=1)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)