.NET Region与行的交集

时间:2015-10-30 16:55:56

标签: .net graphics system.drawing

我试图检查line1是否与line2相交。 Line1和line2是DrawingPath对象。我将问题描绘成这段代码:

let path1 = Drawing2D.GraphicsPath()
path1.AddLine(0.f, 0.f, 10.f,10.f)
let rg = Region(path1)
let path2 = Drawing2D.GraphicsPath()
path2.AddLine(10.f, 0.f, 0.f, 10.f)
//Region contains only path1
rg.Intersect(path2)
let g = this.CreateGraphics()
if rg.IsEmpty(g) then
  printfn "NO INTERSECTION"

此代码始终生成" NO INTERSECTION"打印。为什么线不相交 彼此?

我需要检查第x行是否与路径y相交。

2 个答案:

答案 0 :(得分:0)

您正在使用pt而不是path1的区域初始化rg,就像我认为您想要的那样。

pt不在示例代码中,我猜测它在测试代码中的位置更高。

将其更改为let rg = Region(path1),我打赌它会正常工作

答案 1 :(得分:0)

值得做的另一点是AddLine()在GraphicsPath中创建一条线,但该线没有实际宽度(即宽度为零),因此它不相交的原因。

你需要在每条线上调用Widen(),这会给它们一些实际的宽度,所以它们有一个可以相互交叉的区域。

我在下面有一个小例子,展示了如何解决这个问题 - 它被编写为与LinqPad一起使用...

>>> class Foo(object):
...   @classmethod
...   def ugh(cls):
...     return 33
...
>>> Foo.ugh()
33
>>> foo = Foo()
>>> foo.ugh()
33