VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: 八戒2

擂台赛第59期[多边形交集]

[复制链接]
发表于 2009-5-8 21:44:33 | 显示全部楼层

我终于也水出来了

果然不是 xor,而是 and,还以为猜对了呢,唉,白高兴一场。ben1222 也误导我,明明没猜对,怎么表扬我眼光犀利起来了呢?
PS:其实逆一下CreatePolygonRgn、FillRgn 和 CombineRgn 这几个API就知道交集怎么求了,不过这工作量也许比直接写还大



解压密码:
游客,如果您要查看本帖隐藏内容请回复


[ 本帖最后由 VBProFan 于 2009-5-8 22:55 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2009-5-8 23:42:28 | 显示全部楼层

回复 #21 VBProFan 的帖子

多边形交集 好源码
回复 支持 反对

使用道具 举报

发表于 2009-5-9 00:16:29 | 显示全部楼层

回复 #21 VBProFan 的帖子

这个and是指region的求交参数吧...

我说对是因为确实只用了Polygon这一个画多边形的api...
并且是设置xor笔后来调用Polygon画2个不同填充色的多边形以水出这个效果...
难道那帖子不是这个意思?

没用到region系列的函数...
因为...本来就没去算什么交集...只是效果满足了"结果多边形高亮显示"这条而已...
所以说很水很假...
回复 支持 反对

使用道具 举报

发表于 2009-5-9 09:12:24 | 显示全部楼层

回复 #23 ben1222 的帖子

哦,那看来是两种不同的解法。
其实刚开始时我也想按照你的思路做一个出来,但是 Polygon 函数只能画边,你又没用到 region 系列函数(当然包括 FillRgn 了),那你是怎么填充内部颜色的呢?能否提示一下?
我对这种“搞假”很感兴趣 想用 XOR 的方法再搞一个,ひひ~

[ 本帖最后由 VBProFan 于 2009-5-9 09:17 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-5-9 10:20:53 | 显示全部楼层

回复 #24 VBProFan 的帖子

这样啊...要知道窗体的属性可不是摆设呀...对一些api来说是有效的...
把fillstyle设为0-solid后polygon就可以以fillcolor填充多边形内部颜色了
drawmode设为7-xor pen就可以让polygon用异或笔来画多边形了...
回复 支持 反对

使用道具 举报

发表于 2009-5-9 11:12:16 | 显示全部楼层
唉,原来如此~!其实我昨晚已经做出来了,只不过觉得颜色怪怪的,弄不成红色和蓝色就放弃了。现在才想起要先取反xor后才是原来想要设置的颜色。再次感谢 ben1222 的指点!



  1. Option Explicit
  2. Private Type COORD
  3.   x As Long
  4.   y As Long
  5. End Type
  6. Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As Any, ByVal nCount As Long) As Long
  7. Private Sub Form_Load()
  8.   Dim poly1(1 To 3) As COORD
  9.   Dim poly2(1 To 3) As COORD
  10.   
  11.   Me.BackColor = vbWhite
  12.   Me.ForeColor = Not vbBlack And &HFFFFFF
  13.   Me.AutoRedraw = True
  14.   Me.ScaleMode = vbPixels
  15.   Me.FillStyle = vbSolid
  16.   Me.DrawMode = vbXorPen
  17.   Me.DrawStyle = vbDot
  18.   
  19.   poly1(1).x = 156
  20.   poly1(1).y = 10
  21.   poly1(2).x = 78
  22.   poly1(2).y = 154
  23.   poly1(3).x = 234
  24.   poly1(3).y = 154
  25.   
  26.   poly2(1).x = 156
  27.   poly2(1).y = 170
  28.   poly2(2).x = 78
  29.   poly2(2).y = 60
  30.   poly2(3).x = 234
  31.   poly2(3).y = 60
  32.   Me.FillColor = (Not vbRed) And &HFFFFFF
  33.   Polygon Me.hdc, poly1(1), 3
  34.   Me.FillColor = (Not vbBlue) And &HFFFFFF
  35.   Polygon Me.hdc, poly2(1), 3
  36. End Sub
复制代码


其实这种也不能说是水,如果题目不要求输出交集多边形顶点坐标,这样做即可。如果要求的话,那么就自己写个填充算法,然后再求出交集,最后求交集的边界和顶点。不过这种方法时间复杂度和空间复杂度都比较大,呵呵~

[ 本帖最后由 VBProFan 于 2009-5-9 11:35 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2009-5-12 09:31:14 | 显示全部楼层
Weiler-Atherton算法
完全不会...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-21 08:11:44 | 显示全部楼层
本期结案,无擂主。
回复 支持 反对

使用道具 举报

发表于 2009-5-21 10:43:32 | 显示全部楼层
对不起老大了....
算法我实在是有心无力, 写不出来东西......
回复 支持 反对

使用道具 举报

发表于 2009-5-21 10:51:19 | 显示全部楼层
进来学习一下了.. 我估计就算只用现成的API我也做不出来..

然后,我以为会有人做一个DX的版本,用DX里面的方法应该也能行呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-1 00:00

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表