C# 如何在仅由线条(无填充)组成的闭合形状内进行命中测试

C# 如何在仅由线条(无填充)组成的闭合形状内进行命中测试,c#,.net,wpf,system.drawing,C#,.net,Wpf,System.drawing,怎么做?该图形是DrawingVisual和DrawingContext的实例。DrawLine用于绘制闭合形状 作为临时解决方案,我画了一条半透明的线,几乎看不见,其厚度等于整个形状的厚度。这样它就可以响应命中测试。有更好的方法吗?如果你的形状是凸面的,那么对于每一段a;B对于您的形状,您必须执行以下操作: 构建三维向量MA M是单击位置,A是当前线段的第一个点。 构建三维向量BA B是当前线段的第二个点,A是当前线段的第一个点 计算点积MA+BA,如果结果向量的方向对于形状中的所有线段始终相

怎么做?该图形是DrawingVisual和DrawingContext的实例。DrawLine用于绘制闭合形状


作为临时解决方案,我画了一条半透明的线,几乎看不见,其厚度等于整个形状的厚度。这样它就可以响应命中测试。有更好的方法吗?

如果你的形状是凸面的,那么对于每一段a;B对于您的形状,您必须执行以下操作:

构建三维向量MA M是单击位置,A是当前线段的第一个点。 构建三维向量BA B是当前线段的第二个点,A是当前线段的第一个点 计算点积MA+BA,如果结果向量的方向对于形状中的所有线段始终相同,则计算点积MA+BA。
如果形状不是凸面,则必须先将其拆分为凸面形状,然后对每个凸面形状应用前面的方法。

此注释是正确答案:


我打算建议使用封闭边框并使用命中测试 在那上面。但是你已经实现了同样的事情


这是一个需要使用代码计算东西的解决方案,我正在寻找WPF中内置的东西,比如矩形DrawRectangle方法等形状的命中测试功能。我也在一个完全2D的环境中工作。我建议使用一个封闭的边框,并在上面使用命中测试。但是你已经实现了同样的事情。