给定平面上一点p(x0,y0),判断该点是否在三角形ABC中,三角形顶点坐标分别为A(xa,xb),B(xb,yb),C(xc,yc)。可以使用面积法来判断,方法如下:其中S(A,B,C)表示三角形ABC的面积。
- 若abs( S(A,B,C) ) = abs( S(P,B,C) ) + abs( S(A,P,C) ) + abs( S(A,B,P) ) ,则P在三角形ABC的内部或边上;如果还有abs( S(P,B,C) )、abs( S(A,P,C) ) 和abs( S(A,B,P) )全都大于0,则说明P在三角形ABC的内部,否则P在三角形ABC的边上,具体为:S(P,B,C)为0,则说明P在BC边上,S(A,P,C)为0,则说明P在AC边上,S(A,B,P)为0,则说明P在AB边上;
- 若abs( S(A,B,C) ) < abs( S(P,B,C) ) + abs( S(A,P,C) ) + abs( S(A,B,P) ) ,则P在三角形ABC的外部;
- 对abs( S(A,B,C) ) > abs( S(P,B,C) ) + abs( S(A,P,C) ) + abs( S(A,B,P) ) 情况在理论上是不存在的。
此处又引出另一个问题,如何求平面中三角形的面积?这个可以使用叉乘法来实现,即S(A,B,C)为向量AB叉乘AC所得向量模的1/2,再对该值求绝对值就是三角形ABC的面积。
巧用向量计算三角形面积,这篇文章的证明很好理解。
public static final double EPS = 1e-6; public static class Point{ int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } public static double calcArea(Point a, Point b, Point c) { int x1 = b.x - a.x; int y1 = b.y - a.y; int x2 = c.x - a.x; int y2 = c.y - a.y; return Math.abs(x1*y2-x2*y1)/2.0; } public static boolean isInsideTriangle(Point a, Point b, Point c, Point p) { double abc = calcArea(a, b, c); double abcp = calcArea(a, b, p) + calcArea(a, c, p) + calcArea(b, c, p); return Math.abs(abc - abcp) < EPS; }
相关推荐
请判断该点是否在三角形内部 * * 输入格式:共2行数据,第一行是以空格为分隔符的数组,共6个元素,分别表示三个点的坐标。第二行是 以空格为分隔符的数组,共2个元素,表示另外点的坐标 * * 输出格式:共1行...
判断一个点是否在三角形内的几种算法(2D). 一、根据面积来计算 二、利用矢量叉积来计算
判断一个点在三角形内,通过矢量的叉积判断一个点是不是在三角形内,判断准确
利用C++,opencv2.2判断一点是否在确定三点的三角形内
Java判断一个点是否在三角形内部(包含边界)
路是:首先判断该点是否在三角形上,其次根据该点是否在同侧与另一点是否在同一侧 根据结果如果有全为正则为内 如果至少有一个点为负则为外!
非常实用的且完全的判断程序,能对delaunay插值进行很好的辅助作用
判断平面上一点是否在三角形内,简单,一看就懂
输入三角形三个顶点坐标,之后输入要查询的点的坐标,之后程序判定点是否在三角形内
判断键盘输入的三个数是否构成三角形(等边三角形,等腰三角形,一般三角形或构不成三角形)
利用java编写的小程序判断三边是否能构成三角形,由各个方面的的事例构成。
cocos2dx判断点是否在三角形内、点到线段的距离、线段和线段是否相交
判断三角形形状程序判断三角形形状程序判断三角形形状程序
用射线法判断点是否在多边形中,编译环境VC6.0,鼠标左键实现绘制多边形,右键进行判断。
判断一个点是否在一个三角行内的代码
判断三角形是等腰三角形还是直角三角形还是等边三角形
判断从键盘输入的三个数能否构成三角形。如果是特殊的三角形(如等边、等腰、直角,等腰直角)需要能判断出来。
本代码使用fortran语言基于面积法来判定给定的点是否在三角形内,而且是判定N个给定的点是否在M个三角形网格中,而且输出在那个网格中
文件中给了障碍物的数据,使用者也可自行修改各种数据,算法实现判断坐标点是否在三角形内,若在就删除
VB 判断三角形的构成 VB 判断三角形的构成 VB 判断三角形的构成