7 个解决方案
#1
用面积计算,实现比较方便
判断PAB+PAC+PBC的面积与三角形ABC的面积 就知道P点位于哪了
判断PAB+PAC+PBC的面积与三角形ABC的面积 就知道P点位于哪了
#2
lz自己的方法没太明白,1#的办法还不错
#3
我的意思是:按逆时针方向,如果该点在每条边的左侧,则点在三角形内部;只要有一条边,点不在他的左侧,则该点就在三角形的外部(不考虑点在边上的情况)。。。。。
#4
http://topic.csdn.net/u/20070502/11/55c9dbd0-f26f-4d98-a113-1c172441ace6.html
看3楼
a,b,c都>=0就说明在内部。
看3楼
a,b,c都>=0就说明在内部。
#5
1楼的方法,不能判断点的边上这种情况!
楼主本身的方法,可以这么判断,取三角形的一条边,判断点与三角形的另外一个点是否同侧,判断3次,只要都是同侧,那么,就是在三角形内!
#6
// == 0 三点共线,但是不能确定方向。
// < 0 23在12的顺时针方向。
// > 0 23在12的逆时针方向。
// -----------------------------------------------------------------向量叉乘
inline REAL cross_product(REAL x1, REAL y1,
REAL x2, REAL y2,
REAL x3, REAL y3)
{
return (x3 - x2) * (y2 - y1) - (y3 - y2) * (x2 - x1);
}
// -------------------------------------------------某点是否在指定的三角形内
inline bool point_in_triangle(REAL x1, REAL y1,
REAL x2, REAL y2,
REAL x3, REAL y3,
REAL x, REAL y)
{
bool cp1 = cross_product(x1, y1, x2, y2, x, y) < 0.0;
bool cp2 = cross_product(x2, y2, x3, y3, x, y) < 0.0;
bool cp3 = cross_product(x3, y3, x1, y1, x, y) < 0.0;
return cp1 == cp2 && cp2 == cp3 && cp3 == cp1;
}
叉乘判断下方向关系。如果叉乘结果一致肯定在三角形内,其中一个结果=0,则在三角形上,否则三角形外。
#7
lz的想法是正确的,实现方法就看楼上的代码:)
#1
用面积计算,实现比较方便
判断PAB+PAC+PBC的面积与三角形ABC的面积 就知道P点位于哪了
判断PAB+PAC+PBC的面积与三角形ABC的面积 就知道P点位于哪了
#2
lz自己的方法没太明白,1#的办法还不错
#3
我的意思是:按逆时针方向,如果该点在每条边的左侧,则点在三角形内部;只要有一条边,点不在他的左侧,则该点就在三角形的外部(不考虑点在边上的情况)。。。。。
#4
http://topic.csdn.net/u/20070502/11/55c9dbd0-f26f-4d98-a113-1c172441ace6.html
看3楼
a,b,c都>=0就说明在内部。
看3楼
a,b,c都>=0就说明在内部。
#5
1楼的方法,不能判断点的边上这种情况!
楼主本身的方法,可以这么判断,取三角形的一条边,判断点与三角形的另外一个点是否同侧,判断3次,只要都是同侧,那么,就是在三角形内!
#6
// == 0 三点共线,但是不能确定方向。
// < 0 23在12的顺时针方向。
// > 0 23在12的逆时针方向。
// -----------------------------------------------------------------向量叉乘
inline REAL cross_product(REAL x1, REAL y1,
REAL x2, REAL y2,
REAL x3, REAL y3)
{
return (x3 - x2) * (y2 - y1) - (y3 - y2) * (x2 - x1);
}
// -------------------------------------------------某点是否在指定的三角形内
inline bool point_in_triangle(REAL x1, REAL y1,
REAL x2, REAL y2,
REAL x3, REAL y3,
REAL x, REAL y)
{
bool cp1 = cross_product(x1, y1, x2, y2, x, y) < 0.0;
bool cp2 = cross_product(x2, y2, x3, y3, x, y) < 0.0;
bool cp3 = cross_product(x3, y3, x1, y1, x, y) < 0.0;
return cp1 == cp2 && cp2 == cp3 && cp3 == cp1;
}
叉乘判断下方向关系。如果叉乘结果一致肯定在三角形内,其中一个结果=0,则在三角形上,否则三角形外。
#7
lz的想法是正确的,实现方法就看楼上的代码:)