判断点与多边形的关系

free_flyingblue 2002-05-25 01:04:16
请问各位是否有判断点在多边形内还是多边形外的vb源程序吗?
或者具体地将一下算法。vb我刚刚接触,谢谢。
...全文
208 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
free_flyingblue 2002-05-31
  • 打赏
  • 举报
回复
我在看其他问题时看到您有一段dxf的显示程序,它这里为什么可以在picturebox上显示点为负的图象?
free_flyingblue 2002-05-30
  • 打赏
  • 举报
回复
是啊我也非常感谢technofantasy
free_flyingblue 2002-05-30
  • 打赏
  • 举报
回复
如果光依靠二维点的信息好像是不能组成唯一的多边形的。这个在我的另外一个提问中有人已经提出了。
那如果数组是依据直线的起点和终点来存储的,那是应该可以进行顺时钟或者逆时针来排序的吧。
我想,如4维数组为一个线段的起点和终点。轮廓从第一条线段开始,将其终点和轮廓的其他线段上的端点进行比较。如果他和某条线段的始点相同则将该条线段和原来的第二条线段进行对调,如果和某线段的终点相同,则在换位的同时还要把它的始点和终点对调,依次循环来完成排序。
这样不知道是否可以。
现在我下去编了,试试看,vb编程还在初始阶段呵呵,希望您也能帮助我谢谢了。
daturawing 2002-05-30
  • 打赏
  • 举报
回复
收获很大!
TechnoFantasy 2002-05-30
  • 打赏
  • 举报
回复
如果是负的当然不行,需要进行坐标点的转换,对于排序的算法我想一下先。
free_flyingblue 2002-05-30
  • 打赏
  • 举报
回复
technofantasy(www.applevb.com):
如何将无序的多边形顶点集合,排序成逆时针或者顺时针排序???
用什么具体的算法呢?
是否转化为二维数组的排列?具体怎么做呢?谢谢了。
free_flyingblue 2002-05-30
  • 打赏
  • 举报
回复
恩懂了,请问如果点是的坐标是负的怎么办,好像无法显示出来负的图形阿。
TechnoFantasy 2002-05-29
  • 打赏
  • 举报
回复
因为VB中默认的控件的Scale是Twips,在一般情况下,15个Twips是一个像素,所以要除以15
设定MousePoint的目的是为了光标移动到区域内可以变成十字形。
free_flyingblue 2002-05-29
  • 打赏
  • 举报
回复
帮助真大,有几个地方请教一下
1。ap。x=x、15是什么意思阿
2。winding=2和Dim lB As Long
Dim lOld As Long什么意思呢
3。Picture1.MousePointer = 2
Picture1.MousePointer = 0两个数字的意义是?
为什么执行起来好像没什么作用?要把前面的declare做成模块吗?


TechnoFantasy 2002-05-27
  • 打赏
  • 举报
回复
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim ap As POINTAPI

ap.X = X / 15: ap.Y = X / 15
'判断光标是否在区域内
If PtInRegion(hRgn, X / 15, Y / 15) Then
Picture1.MousePointer = 2
Else
Picture1.MousePointer = 0
End If
End Sub

上面的代码在光标移动时判断光标是否在区域中
TechnoFantasy 2002-05-27
  • 打赏
  • 举报
回复
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom 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 FillRgn Lib "gdi32" (ByVal hdc As Long, _
ByVal hRgn As Long, ByVal hBrush As Long) As Long
Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, _
ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) _
As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal _
hObject As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long

Const ALTERNATE = 1
Const WINDING = 2

Dim hRgn As Long

Private Sub Command1_Click()
Dim xx(4) As POINTAPI
Dim lB As Long
Dim lOld As Long

xx(0).X = 0: xx(0).Y = 0
xx(1).X = 50: xx(1).Y = 0
xx(2).X = 50: xx(2).Y = 50
xx(3).X = 0: xx(3).Y = 50
xx(4).X = 5: xx(4).Y = 25

'建立不规则区域
hRgn = CreatePolygonRgn(xx(0), 5, ALTERNATE)
End Sub

上面的代码建立了一个rgn句柄,然后你就可以通过ptInRegion来判断了。
哈士奇打嘴仗 2002-05-27
  • 打赏
  • 举报
回复
ok!
free_flyingblue 2002-05-27
  • 打赏
  • 举报
回复
谢谢TechnoFantasy(www.applevb.com),我vb初学,但我对api不是很懂,
各位能否具体讲一下编程。这样可能我更容易理解。谢谢啦
TechnoFantasy 2002-05-26
  • 打赏
  • 举报
回复
根据所有点的坐标利用API函数CreatePolygonRgn建立一个区域,然后用tj_aj(程序人生) 讲的方法判断点是否在这个Region里面
free_flyingblue 2002-05-26
  • 打赏
  • 举报
回复
用vb对autocad进行二次开发
判断图形是否存在槽或者悬臂的vb算法与源程序
我的想法是--将顶点信息存于数组(已完成),然后对取图形中的点来判断点与多边形的关系,然后通过点在多边形里还是外来判断是槽还是悬臂。
可否各位能讲讲具体的算法和源程序
hycao 2002-05-25
  • 打赏
  • 举报
回复
说具体一点,至少要知道这个多边形是根据什么条件生成的,怎么生成的。
tj_aj 2002-05-25
  • 打赏
  • 举报
回复
用api :
创建多边形区域,再用ptInRegion判断,very easy!
daturawing 2002-05-25
  • 打赏
  • 举报
回复
你的多边形是用什么来做的,shape控件,如果是的话,你可以把点的坐标和你多边形的坐标判断,不就结了吗?
也听听其他人的高见!

7,763

社区成员

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

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