我有一張地圖,其上繪製了一些死點(無法觸及的區域)。消除線條不存在的區域
在我的應用程序的流程中,我需要檢查一條線是否可以在此地圖上到達。
現在,我的線路交叉點代碼非常穩固,但我無法確定如何限制需要檢查的死區數量,因爲其中一些將位於地圖的另一側。
現在死區只是一個List<Point>
其中Point
是X和Y兩個double
型的,我的線僅有2描述開始和該行的末尾單獨的點。
所以,在這裏我打電話這一點,並處理對所有盲區,這是我在做什麼:
DeadZones.All(dz => !FastPolygons.DoesLineIntersectPolygon(point1, point2, dz.Polygon));
一開始,我以爲我可以使用MAXX與美星從盲區消除那些這些距離很遠,但是如果兩個點都位於死區之外,那麼所有這些點仍然會被處理,並且要求線的每一端都有一個點實際位於死區,以便使死區被淘汰。
我寫了一個方法,我可以在我的linq語句中的Where
中使用,在我意識到這不起作用之前進行嘗試。這是我嘗試
private static bool ZoneCouldNotOverlap(Point point, Zone zone)
{
return (zone.MaxX < point.X || zone.MaxY < point.Y) || (zone.MinX > point.X || zone.MinY > point.Y);
}
,然後LINQ的聲明成爲本:
DeadZones.Where(x=> ZoneCouldNotOverlap(point1,x) || ZoneCouldNotOverlap(point2,x)).All(dz => !FastPolygons.DoesLineIntersectPolygon(point1, point2, dz.Polygon));
所以我一到這個地步,我可以消除地圖的很大一部分,因此不處理在我不感興趣的地圖部分的死區,但我似乎無法意識到如何在我的Linq聲明中做到這一點。任何幫助是非常讚賞的。
編輯:我還就如何過
我目前正在建立一個結構而不是2個點的線,所以我可以訪問每個軸的最小值和最大值,並且有一些想法。如果事情不能解決這個問題,我會更新我的問題 – 2015-03-13 12:24:39
您是否必須確認這兩個點不在區域的兩側?因此,您可以使用區域的最小和最大x和y作爲粘合框,然後檢查以確保兩個點位於該框的右側,左側,上方或下方以排除該區域? – juharr 2015-03-13 12:34:44
@juharr這就是我現在所想的解決方案。通過給線MinX和MaxX使結線變得更容易,並且Y的屬性與屬性相同 – 2015-03-13 12:40:13