public bool ContainsPoint(HoleInstanceMetadata instanceMetadata, DoubleVector3 pointWorld, double agentRadius) { var pointLocal3 = Vector3.Transform(pointWorld.ToDotNetVector(), instanceMetadata.WorldTransformInv); var pointLocal = new IntVector2((int)pointLocal3.X, (int)pointLocal3.Y); if (!dilatedPunchResultByAgentRadius.TryGetValue(agentRadius, out var dilatedPunchedLand)) { dilatedPunchedLand = PolygonOperations.Offset() .Include(punchResult.FlattenToPolygonAndIsHoles()) .Dilate(agentRadius) .Execute(); dilatedPunchResultByAgentRadius[agentRadius] = dilatedPunchedLand; } return(dilatedPunchedLand.PointInPolytree(pointLocal, out var _)); }