计算一个对象是否在一组坐标内?
我有一组 X 和 Y 点来构建一个形状,我需要知道一个对象是否在其中,它的计算是什么?
X 和 Y 坐标示例:
522.56055 2389.885
544.96 2386.3406
554.18616 2369.2385
535.21814 2351.396
497.5552 2355.8396
我不太擅长数学:(所以我希望得到一些支持来理解它是如何完成的。
到目前为止我所拥有的示例,但似乎不太可靠:
private boolean isInsideShape(Zone verifyZone, Position object)
{
int corners = verifyZone.getCorners();
float[] xCoords = verifyZone.getxCoordinates();
float[] yCoords = verifyZone.getyCoordinates();
float x = object.getX();
float y = object.getY();
float z = object.getZ();
int i, j = corners - 1;
boolean inside = false;
for(i = 0; i < corners; i++)
{
if(yCoords[i] < y && yCoords[j] >= y || yCoords[j] < y && yCoords[i] >= y)
if(xCoords[i] + (y - yCoords[i]) / (yCoords[j] - yCoords[i]) * (xCoords[j] - xCoords[i]) < x)
inside = !inside;
j = i;
}
return inside;
}
I have a set of X and Y points that builds a shape and I need to know if an object is inside it or not what is the calculation to it ?
X and Y coords example:
522.56055 2389.885
544.96 2386.3406
554.18616 2369.2385
535.21814 2351.396
497.5552 2355.8396
I am not really good with math :( so i would appreciate some support to understand how it is done.
Example of what I have so far but doesnt seem very reliable:
private boolean isInsideShape(Zone verifyZone, Position object)
{
int corners = verifyZone.getCorners();
float[] xCoords = verifyZone.getxCoordinates();
float[] yCoords = verifyZone.getyCoordinates();
float x = object.getX();
float y = object.getY();
float z = object.getZ();
int i, j = corners - 1;
boolean inside = false;
for(i = 0; i < corners; i++)
{
if(yCoords[i] < y && yCoords[j] >= y || yCoords[j] < y && yCoords[i] >= y)
if(xCoords[i] + (y - yCoords[i]) / (yCoords[j] - yCoords[i]) * (xCoords[j] - xCoords[i]) < x)
inside = !inside;
j = i;
}
return inside;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以从这里开始: http://en.wikipedia.org/wiki/Point_in_polygon
您还可以可能会查看JTS 拓扑套件。
特别是使用
编辑:这是使用 JTS 的示例:
这是使用 AWT 的示例(它更简单,是 Java SE 的一部分):
You may start from this: http://en.wikipedia.org/wiki/Point_in_polygon
You also might look into JTS Topology Suite.
And in particular use this function.
EDIT: Here is example using JTS:
Here is example using AWT (which is simpler and is part of Java SE):
我一直都是这样做的:
I've always done it like so: