判断点是否在三角形内
2017-02-19 23:42
253 查看
已知:三角形ABC,点P
问题:点P是否在三角形内
1.面积法
如果三角形PAB、PAC和PBC的面积之和与三角形ABC的面积相等,则可判定点P在三角形ABC内(包括在三条边上)。
已知三角形顶点A、B、C)的坐标分别为(Ax, Ay)、(Bx, By)、(Cx, Cy),即可计算其面积:
S = |(Ax * By + Bx * Cy + Cx * Zy - Ay * Bx - By * Cx - Cy * Ax) /2|
2.线段法
如果线段PA与线段BC、或者线段PB与线段AC、或者线段PC与线段AB有交点,则可判定点P在三角形之外。
如果点P到AB的距离比C到AB的距离短,并且点P到AC的距离比B到AC的距离短,并且点P到BC的距离比A到BC的距离短,则可以判定点P在三角形内。
3.向量法
设三边方程BC:fa(x,y)=0,AC:fb(x,y)=0,AB:fc(x,y)=0
以BC为例,在三角形内的点必须与点A在BC的同侧,对于点P(x,y)在三角形内首先要满足fa(x,y)*fa(Ax,Ay)>0,其他边也同理,所以只要比较fa(x,y)*fa(Ax, Ay)、fb(x,y)*fb(Bx,By)、fc(x,y)*fc(Cx, Cy)
这三个数的正负性
1)三个数都是正数:D在三角形内
2)至少有一个负数:D在三角形外
3)有且只有一个0,另两个为正数:在三角形边上
4)有且只有一个0,一个正数一个负数:在三角形边的延长线上,也算在三角形外,因为满足2
5)有二个0:在三角形的顶点上
6)不可能出现3个0,或3个负数,或一个0两个负数的情况
4.同向法
假设点P位于三角形内,沿着ABCA的方向在三条边上行走时,点P始终位于边AB,BC和CA的右侧。当选定线段AB时,点C位于AB的右侧,同理选定BC时,点A位于BC的右侧,最后选定CA时,点B位于CA的右侧,所以当选择某一条边时,我们只需验证点P与该边所对的点在同一侧即可。判断两个点在某条线段的同一侧可以通过叉积来实现,连接PA,将PA和AB做叉积,再将CA和AB做叉积,如果两个叉积的结果方向一致,那么两个点在同一侧。
http://blog.sina.com.cn/s/blog_6e09f3460101cif7.html
问题:点P是否在三角形内
1.面积法
如果三角形PAB、PAC和PBC的面积之和与三角形ABC的面积相等,则可判定点P在三角形ABC内(包括在三条边上)。
已知三角形顶点A、B、C)的坐标分别为(Ax, Ay)、(Bx, By)、(Cx, Cy),即可计算其面积:
S = |(Ax * By + Bx * Cy + Cx * Zy - Ay * Bx - By * Cx - Cy * Ax) /2|
2.线段法
如果线段PA与线段BC、或者线段PB与线段AC、或者线段PC与线段AB有交点,则可判定点P在三角形之外。
如果点P到AB的距离比C到AB的距离短,并且点P到AC的距离比B到AC的距离短,并且点P到BC的距离比A到BC的距离短,则可以判定点P在三角形内。
3.向量法
设三边方程BC:fa(x,y)=0,AC:fb(x,y)=0,AB:fc(x,y)=0
以BC为例,在三角形内的点必须与点A在BC的同侧,对于点P(x,y)在三角形内首先要满足fa(x,y)*fa(Ax,Ay)>0,其他边也同理,所以只要比较fa(x,y)*fa(Ax, Ay)、fb(x,y)*fb(Bx,By)、fc(x,y)*fc(Cx, Cy)
这三个数的正负性
1)三个数都是正数:D在三角形内
2)至少有一个负数:D在三角形外
3)有且只有一个0,另两个为正数:在三角形边上
4)有且只有一个0,一个正数一个负数:在三角形边的延长线上,也算在三角形外,因为满足2
5)有二个0:在三角形的顶点上
6)不可能出现3个0,或3个负数,或一个0两个负数的情况
4.同向法
假设点P位于三角形内,沿着ABCA的方向在三条边上行走时,点P始终位于边AB,BC和CA的右侧。当选定线段AB时,点C位于AB的右侧,同理选定BC时,点A位于BC的右侧,最后选定CA时,点B位于CA的右侧,所以当选择某一条边时,我们只需验证点P与该边所对的点在同一侧即可。判断两个点在某条线段的同一侧可以通过叉积来实现,连接PA,将PA和AB做叉积,再将CA和AB做叉积,如果两个叉积的结果方向一致,那么两个点在同一侧。
http://blog.sina.com.cn/s/blog_6e09f3460101cif7.html
相关文章推荐
- 判断点是否在三角形内
- 转载:判断一个点是否在一个三角形面内
- 分享自己推导的判断点是否落在三角形中的算法
- 写一个方法void triangle(int a,int b,int c),判断三个参数是否能构成一个三角形。如果不能则抛出异常IllegalArgumentException,显示异常信息:a,b,
- 判断点是否在三角形内
- 判断点是否在三角形内
- java编程:命令行输入的三个整数判断是否构成三角形,不能就抛异常。
- 输入三边判断是否能组成三角形
- 作业 :判断三角形是否成立
- 判断一个点是否在三角形内
- 判断一个点是否在一个三角形内
- 判断点是否在三角形内
- 打印三角形判断括号是否成对
- 【华为练习题】判断点是否在三角形中
- 第五周 三角形内联函数实现 并且判断是否能构成三角形
- 判断三个参数是否能构成一个三角形。如果不能则抛出异常IllegalArgumentException, * 显示异常信息:a,b,c “不能构成三角形”;如果可以构成则显示三角形三个边长。在主方
- 判断点是否在三角形内
- 判断点是否在三角形内
- 判断三个数是否能够组成一个三角形