可以简单的选用面积算法
假设三角形的三个顶点为A,B,C那么可以根据由于点P将三角形分为三个部分计算这三个部分的和是否和大三角形面积相等得到
其中三角形的面积算法,利用凯伦算法
这里贴出我自己的代码,已经调试成功
#include "stdafx.h"
#include <cxcore.h>
#include <cv.h>
#include <highgui.h>
#include <math.h>
#include <iostream>
using namespace std;
double get_distance(CvPoint aA,CvPoint aB)
{
double distanceAB=0.0;
distanceAB=sqrt(double(aA.x-aB.x)*double(aA.x-aB.x)+double(aA.y-aB.y)*double(aA.y-aB.y));
return distanceAB;
}
double get_triangleArea(CvPoint aA, CvPoint aB, CvPoint aC)
{
double distanceAB=get_distance(aA,aB);
double distanceBC=get_distance(aB,aC);
double distanceCA=get_distance(aC,aA);
double distanceSum=(distanceAB+distanceBC+distanceCA)/2;
double area=0.0;
area=sqrt(distanceSum*(distanceSum-distanceAB)*(distanceSum-distanceBC)*(distanceSum-distanceCA));
return area;
}
bool PointinTriangle(CvPoint aA, CvPoint aB, CvPoint aC, CvPoint aP)
{
double areaABC=get_triangleArea(aA,aB,aC);
double areaABP=get_triangleArea(aA,aB,aP);
double areaACP=get_triangleArea(aA,aC,aP);
double areaBCP=get_triangleArea(aB,aC,aP);
if (areaABC==areaABP+areaACP+areaBCP)
{
return true;
}
else
{
return false;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
CvPoint A;
A.x=50;
A.y=10;
CvPoint B;
B.x=10;
B.y=50;