计算一个对象是否在一组坐标内?

2024-03-10

我有一组 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;
}

你可以从这个开始:http://en.wikipedia.org/wiki/Point_in_polygon http://en.wikipedia.org/wiki/Point_in_polygon

您还可以查看JTS 拓扑套件 http://tsusiatsoftware.net/jts/main.html。 并且特别使用这个功能 http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/geom/Geometry.html#within(com.vividsolutions.jts.geom.Geometry).

EDIT:这是使用 JTS 的示例:

import java.util.ArrayList;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;

public class GeoTest {

  public static void main(final String[] args) {

    final GeometryFactory gf = new GeometryFactory();

    final ArrayList<Coordinate> points = new ArrayList<Coordinate>();
    points.add(new Coordinate(-10, -10));
    points.add(new Coordinate(-10, 10));
    points.add(new Coordinate(10, 10));
    points.add(new Coordinate(10, -10));
    points.add(new Coordinate(-10, -10));
    final Polygon polygon = gf.createPolygon(new LinearRing(new CoordinateArraySequence(points
        .toArray(new Coordinate[points.size()])), gf), null);

    final Coordinate coord = new Coordinate(0, 0);
    final Point point = gf.createPoint(coord);

    System.out.println(point.within(polygon));

  }

}

下面是使用 AWT 的示例(它更简单并且是 Java SE 的一部分):

import java.awt.Polygon;

public class JavaTest {

  public static void main(final String[] args) {

    final Polygon polygon = new Polygon();
    polygon.addPoint(-10, -10);
    polygon.addPoint(-10, 10);
    polygon.addPoint(10, 10);
    polygon.addPoint(10, -10);

    System.out.println(polygon.contains(0, 0));

  }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算一个对象是否在一组坐标内? 的相关文章

随机推荐

  • Chrome 中有时会跳过 CSS 过渡

    我想将鼠标悬停在图像上时使用旋转动画翻转图像 请参阅下面的代码 当鼠标悬停在图像上时 它会绕 x 轴旋转一秒钟 当鼠标离开图像时返回 动画在 Firefox 和 Safari 中按预期工作 然而 Chrome有时会跳过动画并立即翻转图像 我
  • 使用 pandas dataframes data python 创建堆叠直方图

    我正在尝试使用来自 2 个或更多不均匀的 pandas 数据帧的数据创建堆叠直方图 到目前为止 我可以让它们在彼此之上绘制图表 但不能堆叠 import pandas as pd import matplotlib pyplot as pl
  • 我什么时候应该在 Python 中使用类型检查(如果有的话)?

    我开始学习 Python 作为一名主要的 Java 开发人员 我遇到的最大问题是了解何时以及何时不使用类型检查 大多数人似乎都说 Python 代码不需要类型检查 但在很多情况下我认为这是必要的 例如 假设我需要使用方法参数来执行算术运算
  • jQuery 模态表单对话框回发问题

    我创建了一个jQuery用户界面 http en wikipedia org wiki JQuery UI模式形式 我希望该形式触发回发 但我很难让它工作 我知道有很多文章是基于使用 SimpleModal 插件的 我尝试过调整这些并覆盖
  • 在python中获取组合框的值

    我正在开发一个简单的程序 我需要从Combobox 当Combobox位于第一个创建的窗口中 但例如如果我有两个窗口并且Combobox在第二个中 我无法从中读取值 例如 from tkinter import from tkinter i
  • 带 Sinch VOIP 的 Pushkit 无法与 Pushkit 配合使用

    我正在尝试在我的 IOS 应用程序中使用 Sinch 实现应用程序到应用程序的呼叫 我已经使用 Sinch 在我的 iOS 应用程序中实现了 Pushkit 但是当应用程序处于后台时 推送通知不起作用 我有两个问题 我是否需要另一个 Web
  • 实现Map并保持插入顺序的Java类?

    我正在java中寻找一个具有键值关联但不使用哈希的类 这是我目前正在做的事情 将值添加到Hashtable 获取一个迭代器Hashtable entrySet Iterate through all values and Get a Map
  • 在python中检测文本中的缩写

    我想在文本中找到缩写并将其删除 我目前正在做的是识别连续的大写字母并将其删除 但我发现它并没有删除缩写 例如MOOCs M O O C M O O Cs 在 python 中是否有一种简单的方法可以做到这一点 或者有什么库可以代替吗 The
  • AWS CDK 用户池授权者

    我正在尝试使用 AWS CDK 创建 API 网关 并使用 Cognito 用户池授权者保护 REST 端点 我找不到任何如何做到这一点的例子 我认为它应该看起来像这样 但也许我需要的方法不存在 const cdk require aws
  • 通过 python selenium 在 Chrome 中限制 CPU

    是否可以通过 python selenium 在 chrome 的 devtools 中限制 CPU 如果是这样 怎么办 看来司机有一个方法execute cdp cmd它代表 执行 Chrome Devtools 协议命令 但我不知道我会
  • 如果属性名称不等于字段名称,Jackson @JsonProperty 不起作用

    我有以下 JSON known name Zevs approximate age 320 和绑定类 public class GodBinding JsonProperty known name public String name Js
  • bazel 3.7.2 上用于在 MAC M1 上设置 mediapipe 的“darwin-arm64”的替代类型是什么?

    我正在尝试在 mac m1 big sur 11 3 1 上的 pyhton3 8 6 安装 mediapipe 所以当我尝试安装 bazel 并运行 Hello World 桌面 示例时 brew search bazel gt Form
  • Delphi:如何在 TEdit/TMaskEdit 中设置文本而不调用 onchange 事件

    我有一个相当大的设置表单 我想用班级中的数据填充它 所以我做了很多 Edt1 text ASettings FirstThing 我想避免 Edt1 onchange nil Edt1 text ASettings FirstThing E
  • 用于将视频水平或垂直切成两半并稍后重新加入的命令

    如何使用 ffmpeg 按分辨率将视频垂直或水平切成两半 因此 对于640 x 480的视频 我想将其分成两半 分辨率为320 x 480 或者将其水平分成两半 分辨率为640 x 240 之后 我需要能够再次合并分离的视频以制作具有原始分
  • 如何创建一个包含 n 个过程应用程序的列表

    我的问题与this one https stackoverflow com questions 249374 scheme procedure to compute the nth repeated application of a fun
  • 如何在 kubernetes 应用程序上获取 ssl?

    我在 kubernetes 上部署了一个简单的流星应用程序 我将外部 IP 地址与服务器关联起来 以便可以从集群内部访问它 现在 我准备将其公开到互联网并保护它 使用 HTTPS 协议 谁能为这部分提供简单的说明 在我看来库贝乐高 http
  • 我可以使用 WiFi 在两部未连接路由器的 Android 手机之间传输数据/消息吗?

    我知道如果两个Android手机连接到同一个wifi网络 它们可以实现套接字编程来在它们之间传输数据 但我其实想知道是否可以使用wifi作为两部Android手机之间的传输介质 就像蓝牙一样 使用 Android 2 2 可以在一台设备上创
  • ASP.NET 与 SharePoint - 哪一个更适合 Web 开发人员?

    我对分享点的信息较少 只有基本信息 Microsoft 为 Web 开发人员发布了 SharePoint 微软还表示 SharePoint 与 Workflow Foundation WCF 等其他 NET 技术兼容 并且是开发网站和 We
  • 图遍历算法名称

    我正在寻找的是图遍历算法的完整列表 并简要描述了它们的目的 作为研究它们的起点 到目前为止我知道 Dijkstra s 单源最短路径 Kruskal s 找到最小生成树 还有哪些比较知名的 请为您的每个答案提供每个算法的简要描述 众所周知的
  • 计算一个对象是否在一组坐标内?

    我有一组 X 和 Y 点来构建一个形状 我需要知道一个对象是否在其中 它的计算是什么 X 和 Y 坐标示例 522 56055 2389 885 544 96 2386 3406 554 18616 2369 2385 535 21814