我有一个包含很多多边形的 Map ,其中一个有一个点,如下所示:
多边形边缘的x和y坐标保存在这样的数据库中(例如):
Polygon(Point(11824, 10756), Point(11822, 10618), Point(11912, 10517), Point(12060, 10529), Point(12158, 10604), Point(12133, 10713), Point(12027, 10812), Point(11902, 10902)),
Polygon(Point(11077, 13610), Point(10949, 13642), Point(10828, 13584), Point(10772, 13480), Point(10756, 13353), Point(10849, 13256), Point(10976, 13224), Point(11103, 13294), Point(11171, 13414), Point(11135, 13558)),
Polygon(Point(11051.801757813, 11373.985351563), Point(11165.717773438, 11275.469726563), Point(11281.733398438, 11255.646484375), Point(11381.07421875, 11333.15625), Point(11440.202148438, 11467.706054688), Point(11404.73046875, 11584.534179688), Point(11301.662109375, 11643.852539063), Point(11169.486328125, 11644.079101563), Point(11067.555664063, 11579.676757813), Point(11018.21484375, 11454.750976563)),
Polygon(Point(12145, 13013), Point(12069.065429688, 13014.67578125), Point(12012.672851563, 12953.833984375), Point(11973.942382813, 12910.14453125), Point(11958.610351563, 12853.736328125), Point(11988.58203125, 12780.668945313), Point(12046.806640625, 12735.046875), Point(12117.080078125, 12729.838867188), Point(12185.567382813, 12743.389648438), Point(12225.575195313, 12803.530273438), Point(12255.934570313, 12859.2109375), Point(12263.861328125, 12914.166992188), Point(12221.2578125, 12978.983398438)),
它们是稍后绘制的,我无法访问它,只能访问此坐标 . 所以我有多边形边的x / y和红点的x / y . 现在我必须知道红点是哪个多边形 .
那么我最需要的就是:
我有红点的x和y坐标以及边的x y坐标 . 我需要绿点的x和y坐标 . (多边形外最近的位置)
我需要它在lua,但随意用任何语言回答,我可以翻译它 .
2 回答
要知道该点在哪个多边形中,可以使用Ray Casting algorithm .
为了找到最近的边缘,你可以使用一个简单的方法计算distance to each edge然后采取最小值 . 只需记住检查边缘的交点是否在边缘之外(检查this) . 如果它在外面,则距离边缘最近的极端 .
好吧用一些伪代码更好地解释直觉:
我认为这个伪代码应该让你去,当然,一旦你有了多边形你的观点!
我的
PolyCollisions
课程:这是一个小的解释(有趣的事实:这是我发布到堆栈溢出的第一个图像!)
对不起,它太乱了......
课程循序渐进:
检查给定点是否在多边形内
如果不是,则返回当前点,因为不需要进行任何更改 .
找到多边形最近的VERTEX
这不是最接近的POINT,因为点可以在顶点之间
grab 顶点的两个邻居,保持一个角度较小的邻居 .
较低的角度比较高的角度具有较低的距离,因为较高的角度"goes away"更快
使用StackOverflow上this问题的答案获取线段的最近点 .
恭喜!你幸免于糟糕的教程!希望它有所帮助:)感谢所有评论链接的答案,帮助我帮助你!
Snap Point to Line
How to calculate an angle from 3 points