我试图检查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相交。
答案 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