【发布时间】:2016-10-04 13:21:06
【问题描述】:
我需要编写一个函数来计算一个点是否在多边形内(真/假)。 多边形总是包含 4 个点。我正在从 SVG 文件中读取多边形和点
<g id="polygons">
<g id="LWPOLYLINE_183_">
<polyline class="st10" points="37.067,24.692 36.031,23.795 35.079,24.894 36.11,25.786 37.067,24.692 " />
</g>
<g id="LWPOLYLINE_184_">
<polyline class="st10" points="35.729,23.8 35.413,23.516 34.625,24.39 34.945,24.67 35.729,23.8 " />
</g>
<g id="LWPOLYLINE_185_">
<polyline class="st10" points="34.483,24.368 33.975,23.925 34.743,23.047 35.209,23.454 34.483,24.368 " />
</g>
<g id="LWPOLYLINE_227_">
<polyline class="st10" points="36.593,22.064 36.009,21.563 35.165,22.57 35.736,23.061 36.593,22.064 " />
</g>
</g>
<g id="numbers">
<g id="TEXT_1647_">
<text transform="matrix(0.7 0 0 1 34.5876 23.8689)" class="st12 st2 st13">169</text>
</g>
<g id="TEXT_1646_">
<text transform="matrix(0.7 0 0 1 35.1049 24.1273)" class="st12 st2 st13">168</text>
</g>
<g id="TEXT_1645_">
<text transform="matrix(0.7 0 0 1 35.924 24.7302)" class="st12 st2 st13">167</text>
</g>
<g id="TEXT_1643_">
<text transform="matrix(0.7 0 0 1 36.0102 22.4477)" class="st12 st2 st13">174</text>
</g>
</g>
所以对于折线,它将是前 4 组坐标,对于文本 X 和 Y 是矩阵括号中的最后 2 个数字。也不知道文本的那个点是文本的中心还是左下角(假设是这个)。
到目前为止,我得到了列表中点和多边形的所有坐标,所以我正在交叉检查这种方式。
【问题讨论】:
-
显示您迄今为止尝试过的内容以及您遇到的具体问题。 Stack 不是代码服务,您必须提供一些想法来解决您的 specifc 问题。要求编写完整的代码是这里的题外话。
-
我是这样计算的:((lowerRightX - upperLeftX) / 2) + upperLeftX = 多边形中部附近的 X 坐标 ((upperRightY - downLeftY) /2) + downLeftY = 中部附近的 Y 坐标的多边形,然后我检查了其他列表,搜索与该计算点具有最接近 X Y 坐标的点: var most = (from entry in myDict where Math.Abs(entry.Key)
-
看看这个stackoverflow.com/questions/1560492/… 现在你只需检查所有的行。
-
如果您可以使用 GDI+,您可以构建一个 GraphicsPath 并使用 IsVisivle(point) 方法。
标签: c# math svg computational-geometry