C# 方法FillContainsWithDetail未按预期工作

C# 方法FillContainsWithDetail未按预期工作,c#,wpf,intersection,C#,Wpf,Intersection,当第一个形状没有接触到另一个形状时,FillContainsWithDetail方法将返回空,并且它必须返回FullyContains。但当我做一些测试时,我发现这并不是它返回的结果 如果形状被触摸或未被触摸,则返回该方法 public string CheckIfInside(Shape shpPlayer, Shape shpObject) { Geometry geo1 = shpPlayer.RenderedGeometry; Geometry geo2 = shpObj

当第一个形状没有接触到另一个形状时,FillContainsWithDetail方法将返回空,并且它必须返回FullyContains。但当我做一些测试时,我发现这并不是它返回的结果

如果形状被触摸或未被触摸,则返回该方法

public string CheckIfInside(Shape shpPlayer, Shape shpObject)
{
    Geometry geo1 = shpPlayer.RenderedGeometry;
    Geometry geo2 = shpObject.RenderedGeometry;

    string s = geo1.FillContainsWithDetail(geo2).ToString();
    return s;
}
返回上面的方法

    [0] "Empty" 
    [1] "Empty" 
    [2] "Intersects"    
    [3] "Intersects"    
    [4] "Intersects"    
    [5] "Empty" 
    [6] "Empty" 
    [7] "Intersects"    
    [8] "Intersects"    
    [9] "FullyInside"   
    [10]    "Empty" 
    [11]    "Empty" 
    [12]    "FullyInside"   
    [13]    "Empty" 
    [14]    "Empty" 
    [15]    "FullyInside"   
    [16]    "Empty" 
    [17]    "Empty" 
    [18]    "FullyInside"   
    [19]    "Empty" 
    [20]    "Empty" 
    [21]    "FullyInside"   
    [22]    "Empty" 
    [23]    "Empty" 
    [24]    "FullyInside"   
    [25]    "Empty" 
    [26]    "Empty" 
    [27]    "FullyInside"   
    [28]    "Empty" 
    [29]    "Empty" 
    [30]    "FullyInside"   
    [31]    "Empty" 
    [32]    "Empty" 
    [33]    "FullyInside"   
    [34]    "Empty" 
    [35]    "Empty" 
    [36]    "FullyInside"   
    [37]    "Empty" 
    [38]    "Empty" 
    [39]    "FullyInside"   
    [40]    "Empty" 
    [41]    "Empty" 
    [42]    "FullyInside"   
    [43]    "Empty" 
    [44]    "Empty" 
    [45]    "FullyInside"   
    [46]    "Empty" 
    [47]    "Empty" 
    [48]    "FullyInside"   
    [49]    "Empty" 
    [50]    "Empty" 
(播放器[shpPlayer/geo1]是红色的小立方体,形状是树木和湖泊)


谢谢你的帮助:我终于找到了答案。问题是我使用RenderedGeometry来获取几何体,但它并没有返回真正的几何体。。。至少不是我想要的。所以我制定了自己的方法,如果这能帮到你的话

private Geometry ConvertToGeometry(Shape s)
    {
        if (s.GetType() == new Rectangle().GetType())
        {
            return new RectangleGeometry(new Rect(new Point(s.Margin.Left, s.Margin.Top), new Point(s.Margin.Left + s.Width, s.Margin.Top + s.Height)));
        }
        if (s.GetType() == new Ellipse().GetType())
        {
            return new EllipseGeometry(new Point(s.Width / 2 + s.Margin.Left, s.Height / 2 + s.Margin.Top), s.Width / 2, s.Height / 2);
        }
        if (s.GetType() == new Polygon().GetType())
        {
            Polygon p = (Polygon)s;
            List<PathSegment> ps = new List<PathSegment>();
            for (int i = 1; i < p.Points.Count; i++)
            {
                ps.Add(new LineSegment(p.Points[i], true));
            }
            PathGeometry pg = new PathGeometry(new PathFigure[] { new PathFigure(p.Points[0], ps, true) });
            return pg;
        }
        return null;
    }
private Geometry ConvertToGeometry(形状s)
{
如果(s.GetType()==新矩形().GetType())
{
返回新矩形几何体(新矩形(新点(s.Margin.Left,s.Margin.Top),新点(s.Margin.Left+s.Width,s.Margin.Top+s.Height));
}
如果(s.GetType()==新椭圆().GetType())
{
返回新的椭圆等高线(新点(s.Width/2+s.Margin.Left,s.Height/2+s.Margin.Top),s.Width/2,s.Height/2);
}
如果(s.GetType()==新多边形().GetType())
{
多边形p=(多边形)s;
List ps=新列表();
对于(int i=1;i
此方法适用于矩形、椭圆和多边形形状。
感谢所有帮助过我的人:D

请在这里主持您的图片。这很容易在问题编辑器中完成。我不知道noelshack是什么,我也不打算点击它来找出答案。其次,我不能确定“返回上述方法”是什么意思,但如果是代码或错误消息的屏幕截图,请将其以纯文本形式粘贴到您的问题中。我认为当它是一个屏幕截图时,我们可以更清楚地看到它,并感谢您的回答。因此,我猜您使用位于不同位置的对象调用了该方法51次,你得到了不同的结果。不知道你给它的投入,没有人能告诉你任何有用的东西。您最好的方法是阅读有关您正在调用的方法的文档,以及
几何体
,然后准确地了解您正在提供的信息。我怀疑当方法说它们相交时,它们是相交的。你是说你认为他们不是?是什么让你如此确定?好的,但我不知道a)哪个“空”对应哪个形状,b)播放器的几何体是什么,或者c)任何形状的几何体是什么。下次(或者这次,如果这不是答案的话)做一个测试。不可能猜出我从未见过的代码中可能有什么错误。你可以做
s is eliple
而不是那样做。。。你有的东西。还要查一下操作员的类型。看起来这个职位是问题的一部分?不过,抵消玩家的影响可能会更快。