设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1450|回复: 0
打印 上一主题 下一主题

[通用发布] 计算两多边形是否香蕉的代码……

[复制链接]

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

跳转到指定楼层
1
发表于 2011-5-29 13:37:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

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

x
  1. module CV
  2.         module_function
  3.         class Point
  4.                 def initialize(x,y)
  5.                         @x=x.to_f
  6.                         @y=y.to_f
  7.                 end
  8.                 def x
  9.                         return @x
  10.                 end
  11.                 def y
  12.                         return @y
  13.                 end
  14.                 def x=(v)
  15.                         return (@x=v)
  16.                 end
  17.                 def y=(v)
  18.                         return (@y=v)
  19.                 end

  20.                 def in_polygon(p)
  21.                         p=p.points
  22.                         nCross=0
  23.                         for i in 0...p.size
  24.                                 p1=p[i]
  25.                                 p2=p[(i+1) % p.size]
  26.                                 next if p1.y == p2.y
  27.                                 next if y < [p1.y, p2.y].min
  28.                                 next if y >= [p1.y, p2.y].max
  29.                                
  30.                                 x1=(y - p1.y)*(p2.x - p1.x)/(p2.y - p1.y) + p1.x
  31.                                 #p  (p2.y - p1.y)
  32.                                 nCross+=1 if x1>x
  33.                         end
  34.                         #p nCross
  35.                         return (nCross % 2 == 1)
  36.                 end
  37.         end
  38.         class Grap
  39.        
  40.         end
  41.         class Polygon<Grap
  42.                 def initialize(*args)
  43.                         @points=args
  44.                 end
  45.                 def points
  46.                         return @points
  47.                 end
  48.                 def &(v)
  49.                         if v.is_a?(Grap)
  50.                                 if v.is_a?(Polygon)
  51.                                         for i in @points
  52.                                                 if i.in_polygon(v)==true
  53.                                                         return true
  54.                                                 end
  55.                                         end
  56.                                         for i in v.points
  57.                                                 if i.in_polygon(self)==true
  58.                                                         return true
  59.                                                 end
  60.                                         end
  61.                                 end
  62.                         end
  63.                         return false
  64.                 end
  65.         end
  66.         class Vector
  67.                
  68.         end

  69. end
  70. poy=CV::Polygon.new(CV::Point.new(0,0),CV::Point.new(1,2),CV::Point.new(5,5),CV::Point.new(5,15))
  71. poy1=CV::Polygon.new(CV::Point.new(300,500),CV::Point.new(100,200),CV::Point.new(500,500),CV::Point.new(500,1500))
  72. p poy&poy1
复制代码
效率一般……没做粗判定……

点评

哦哦~最初是不懂的,后来看了看代码,再读"香蕉"就知道了...  发表于 2011-5-29 19:58
你懂的  发表于 2011-5-29 17:41
是否"香蕉"?  发表于 2011-5-29 14:42
哎呀,蛋疼什么的最有爱了
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-10 19:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表