要求用户输入4个坐标,判断前3个坐标是否可以作为三角形的3个顶点;如果能,同时判断第四个坐标是否在这个三角形内 (不包括在边上和顶点上)

解决方案 »

  1.   

    怎么很多人都在问这个问题?
    http://community.csdn.net/Expert/topic/4255/4255936.xml?temp=.1116754
    http://community.csdn.net/Expert/topic/4255/4255936.xml?temp=.3281061
    http://community.csdn.net/Expert/topic/4264/4264582.xml?temp=.6414453
    http://community.csdn.net/Expert/topic/4310/4310685.xml?temp=.6980707
      

  2.   

    下面我前些天写的:Private Type POINTAPI
            x As Long
            y As Long
        End Type
        Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
        Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
        Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
        '函数说明:
        'CreatePolygonRgn( )函数是用来创建一个图形热点对象,lpPoint参数为形成图形热点区的第一个边界点坐标,nCount参数指出了边界点的个数(如nCount<3时,将无法形成一个封闭区域),nPolyFillMode参数指定填充模式,该函数返回图形热点对象(Long型);
        'DeleteObject( )函数用来删除一个由hObject参数指定的对象;
        'PtInRegion( )函数用来判断某坐标(由参数x、y指出)是否在hRgn图形热 点对象指出的热点区内,若是返回1,否则返回0。Sub diag()
    Dim p(3) As POINTAPI, temp As String, x() As String, i As Long, rgn As Long, beline As Boolean
    error:
    temp = InputBox("请依次输入四个点的横坐标及纵坐标:", "提示", "100,100,500,100,300,300,200,150") '
    x = Split(temp, ",")
    If UBound(x) <> 7 Then MsgBox "输入有误,请重新输入!": GoTo errorFor i = 0 To 3
    p(i).x = CLng(x(i * 2))
    p(i).y = CLng(x(i * 2 + 1))
    Next
    beline = ((p(1).y - p(0).y) ^ 2 * (p(2).x - p(0).x) ^ 2 = (p(1).x - p(0).x) ^ 2 * (p(2).y - p(0).y) ^ 2)
    If beline = True Then
    MsgBox "非三角形!"
    Exit Sub
    Else
    rgn = CreatePolygonRgn(p(0), 3, 0)
    i = PtInRegion(rgn, p(3).x, p(3).y)
    If i = 0 Then
    MsgBox "第4个点在三角形外部!"
    Else
    beline = ((p(1).y - p(0).y) ^ 2 * (p(3).x - p(0).x) ^ 2 = (p(1).x - p(0).x) ^ 2 * (p(3).y - p(0).y) ^ 2)
    beline = beline Or ((p(2).y - p(0).y) ^ 2 * (p(3).x - p(0).x) ^ 2 = (p(2).x - p(0).x) ^ 2 * (p(3).y - p(0).y) ^ 2)
    beline = beline Or ((p(1).y - p(2).y) ^ 2 * (p(3).x - p(2).x) ^ 2 = (p(1).x - p(2).x) ^ 2 * (p(3).y - p(2).y) ^ 2)
    MsgBox "第4个点在三角形" & IIf(beline = True, "顶点或边上!", "内部!")
    End If
    DeleteObject rgn
    End IfEnd SubPrivate Sub Command1_Click()
    diag
    End Sub