如何能解决这样的问题?希望有源码!

timdy 2005-10-07 05:35:32
请用你最熟悉的开发语言按如下需求编写程序

要求用户输入4个坐标,判断前3个坐标是否可以作为三角形的3个顶点;如果能,同时判断第四个坐标是否在这个三角形内 (不包括在边上和顶点上)
...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2005-10-08
  • 打赏
  • 举报
回复
gdi32 里的区域函数不知道可不可以
lingll 2005-10-07
  • 打赏
  • 举报
回复
纯数学问题啊
northwolves 2005-10-07
  • 打赏
  • 举报
回复
现写一个:


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 error

For 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 If

End Sub

Private Sub Command1_Click()
diag
End Sub



province_ 2005-10-07
  • 打赏
  • 举报
回复
如果X1X2X3相等或Y1Y2Y3相等就不能成三角形。
是否在内部有几种办法,我说的就是从第四点开始向右作水平线,看它与三角形的边有几个交点,只有一个那就是在内部。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧