利用vb求点与三角形的位置关系

来源:百度知道 编辑:UC知道 时间:2024/06/13 02:54:29
请给具体代码

发到你邮箱里了

不给具体代码了,只说一下思路吧:
设点的坐标为P(x0,y0),三角形三个顶点的坐标为A(x1,y1)、B(x2,y2)、C(x3,y3),且x1<=x2<=x3
这样整个平面在水平方向上被分为四个区间
1.若x0<x1或x0>x3,则点肯定在三角形之外;
2.如果x1<x0<x2,则计算P与线段AB及线段AC的关系,线段AB所在的直线可写表示为y=[(y2-y1)/(x2-x1)]x+(x2y1-x1y2)/(x2-x1),将x0代入上式,可得竖直直线x=x0与线段AB交点y'的值,如果y'>y0,说明点P位于线段AB下方;如果y'=y0,说明点P正好处于线段AB上;如果y'<y0,说明点P位于线段AB上方。用同样方法确定点P与线段AC的位置关系,如果P位于其中一条线段上方而位于另一条线段下方,则P点位于三角形内部,否则就位于三角形外部;
3. 如果x2<x0<x3,同上。

如果不限制所使用的方法,还可用GDI提供的两个函数CreatePolygonRgn和ptInRegion来判断,最后用DeleteObject删除所创建的区域对象(Region)。函数的声明如下:
Private Declare Function CreatePolygonRgn Lib "gdi32" Alias "CreatePolygonRgn" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function PtInRegion Lib "gdi32" Alias "PtInRegion" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" Al