计算三角形内的格点

2024-02-08

我有一个大三角形的点,我们称之为 a、b、c。 (a =(x,y)等)。

现在我想统计这个三角形围成的区域内有多少个积分点,所以我首先看一下皮克定理。我考虑的第二种方法是生成一个以三角形的最大值、最小值为界的点列表,然后检查每个点是否位于三角形内部。

我使用重心坐标方法来做到这一点。它有效,但是我的三角形相当大,我的程序基本上是跨点的蛮力。我如何改进这个算法?

我的代码可以在这里找到:https://bpaste.net/show/58433b6e389c https://bpaste.net/show/58433b6e389c


这个问题可以而且应该使用来解决皮克定理 https://en.wikipedia.org/wiki/Pick%27s_theorem。阅读本文以充分了解它的工作原理,并且它适用于您能想到的任何多边形。因此,“Pick 说”如果你想计算多边形的面积,你可以使用以下公式area = noOfInsidePoints + noOfBoundaryPoints /2 - 1。要计算任何多边形的面积,您可以使用以下代码,其中pc是表示多边形顶点的结构体数组。

float computeArea()
{
    float area = 0;
    for(int i=1;i<=n;++i) // n is the total number of vertices
        area += (pc[i].x*pc[i+1].y - pc[i+1].x*pc[i].y );
    if(area < 0)
        area *= (-1);
}

计算出面积后,我们必须计算所有多边形边上的点数。这可以使用以下方法完成:

int getBoundaryPoints()
{
    long left=0, right=0;
    int noPoints = 0;
    for(int i=1;i<=n;++i)
    {
        st = abst( pc[i].x - pc[i+1].x );
        right = abs( pc[i].y - pc[i+1].y );
        if(right == 0)
            right = left;
        if(left == 0)
            left = right;
        noPoints += gcd(left, right) +1;
    }
}

也计算了这个,我们可以找到里面的点的数量

noPointsInside = (computeArea() - (getBoundaryPoints() - n)) / 2 + 1;

最终时间复杂度:O(N) 最终内存复杂度:O(N)

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

计算三角形内的格点 的相关文章

  • 比 in_array 更快?

    我需要将一个值与一组数组进行比较 但是 我需要比较 foreach 中的多个值 如果使用 in array 它可能会很慢 非常慢 有没有更快的替代方案 我当前的代码是 foreach a as b in array b array 谢谢 你
  • 生成字符串及其子字符串列表的排列的算法

    我已经忘记这个算法有一段时间了 假设我得到了字符串 cccaatt 我试图生成重复字母的每个子串的所有可能变体 EG cccaatt 作为输入将返回 猫 卡特 猫 卡特 ccat 卡特 卡特彼勒 卡特彼勒 cccat cccat cccaa
  • 什么是确定性快速排序?

    我一直在阅读有关快速排序的内容 发现有时它被称为 确定性快速排序 这是普通快速排序的替代版本吗 普通快速排序和确定性快速排序有什么区别 普通 确定性 快速排序在特定数据集上的行为可能非常差 例如 选择第一个未排序元素的实现在已排序数据上的时
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • 给定一个点向量(可能无序),找到多边形(不是凸包)

    我目前有一个点向量 vector
  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • 有效地合并两个数组 - 一个已排序,另一个未排序

    我正在解决一个问题 该问题有一个由 n 个元素组成的排序数组 后跟一个未排序的长度数组 O logn O 平方 n 如何最有效地对整个列表进行排序 在上述两种情况下我应该使用哪种排序 由于将单个元素插入数组并保持其排序是O n 你不可能变得
  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 坐标算法 - 绕中心旋转

    通过查看这张图片 我想您会很好地理解我的问题 图片已删除 网址不再有效 现在返回广告 所以基本上我想要一个函数 它接受一个对象作为参数 并根据我之前添加的对象数量为该对象提供正确的坐标 假设我将所有这些对象添加到一个数组中 objectAr
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • 在树结构的 Big-O 表示法中:为什么有些来源引用 O(logN),有些来源引用 O(h)?

    在研究遍历二叉搜索树的任何算法的复杂性时 我看到两种不同的方式来表达同一件事 版本 1 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O h 版本 2 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O logN
  • 颜色逻辑算法

    我们正在构建一个体育应用程序 并希望将团队颜色融入到应用程序的各个部分 现在 每个团队都可以使用几种不同的颜色来表示 我想做的是执行检查以验证两个团队颜色是否在彼此一定的范围内 这样我就不会显示两个相似的颜色 因此 如果团队 1 的主要团队
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和
  • 无法理解Peterson算法的正确性

    我在这里讨论彼得森算法的一个场景 flag 0 0 flag 1 0 turn P0 flag 0 1 turn 1 while flag 1 1 turn 1 busy wait

随机推荐

  • 合并将一个发布商变成另一个发布商

    我使用 OAuth 框架 它异步创建经过身份验证的请求 如下所示 OAuthSession current makeAuthenticatedRequest request myURLRequest result Result
  • 将带有空值的 csv 文件导入 phpmyadmin

    当我将 csv 文件导入 MySQL phpmyadmin 时 对于文件中未指定但默认值为 null 的所有整数值 会出现一条错误消息 1366 Incorrect integer value for column id at row 1
  • 如果删除的单元仍在其他单元中使用,那么如果我清理我的使用条款,会有什么不同吗?

    就我个人而言 我喜欢它 如果我的uses子句尽可能小 但在许多应用程序中 真正大的单元 就膨胀的可执行文件而言 就像Forms or VirtualTrees无论如何 至少另一个单位需要 所以 如果我清洁我的身体 会有什么不同吗 uses即
  • 在 R 中添加带有颜色和范围的图例

    以下示例代码根据以下值生成彩色点图a a lt sample 1 100 rbPal lt colorRampPalette c red blue b lt rbPal 10 as numeric cut a breaks 10 plot
  • python 的startswith 是如何工作的?

    我无法理解该行为str startswith https docs python org 3 library stdtypes html str startswith method 如果我执行 hello startswith 它返回 Tr
  • 线程会提高性能吗?

    我有一个这样设置的程序 它是一个 Net Framework 4 控制台应用程序 该程序用于从每台服务器上的每个日志文件 上周 收集 sc 字节和 cs 字节 该程序已完成 但运行时间很长 foreach string server in
  • 在 Rails 3 中编写自定义验证器

    我正在尝试编写一个自定义验证器来检查输入到文本字段中的单词数 我试图效仿 Railscasts 第 211 集中的例子 http railscasts com episodes 211 validations in rails 3 http
  • CSS margin 和 padding 简写属性的顺序助记符

    我永远记不起在一个声明中设置边距或填充的速记属性的顺序 那是 margin top 2px margin bottom 4px margin left 3px margin right 8px 可以写成 margin 2px 8px 4px
  • 如何在OpenCV中将某个RGB值的所有像素替换为另一个RGB值

    我需要能够用 OpenCV 中的另一种颜色替换具有特定 RGB 值的所有像素 我尝试了一些解决方案 但没有一个对我有用 实现这一目标的最佳方法是什么 太长了 使用 Numpy 将所有绿色像素设为白色 import numpy as np p
  • FXCop 自定义规则未显示在规则集中

    我按照此处的步骤创建了一个新的自定义规则并将其添加到 VSStudio 2013 中的规则集中 http blog tatham oddie com au 2010 01 06 custom code analysis rules in v
  • 在 Word 选项加载项对话框中设置发布者

    我使用 Visual Studio 2010 RTM 为 Microsoft Word 2010 Beta 制作了一个插件 当我查看 查看和管理 Microsoft Office 加载项 时 发布者显示为 无 使用软件发布者证书进行代码签名
  • jquery更改事件回调

    如何在之后调用函数一次change 活动完成了吗 例如 像这样 我知道 jQuery 默认没有回调方法 element change function do something on change milestonesSelect mult
  • 你能结合 docker 的单独构建吗?

    我正在使用circleci来部署应用程序 我部署到amd和arm架构 所以我的构建是多架构的 我一直在使用docker buildx 借助 Circleci 的新手臂支持 我能够将这个过程的时间从使用 quemu 的有时 3 小时缩短到大约
  • SQL Server 版本控制与 git 集成?

    我有一个 ERP 系统 由我的团队负责维护 然而最近我们似乎忘记了谁在改变什么 我们需要一个解决方案来控制这些变化 我们正在研究 GIT 的企业版 因为我们所有的软件开发和 Web 开发都可以与它完美配合 更不用说我已经有一些 GIT 经验
  • 获取所有 css 样式属性的访问权限?

    我想通过 JavaScript 访问所有 CSS 属性 不仅针对特定选择器或元素 而且针对所有属性 我想遍历所有属性 style收藏 我怎样才能做到这一点 您可以使用CSSStyleDeclaration object CSSStyleDe
  • Floyd Warshall 使用邻接表

    是否可以使用邻接表对 Floyd Warshall 进行编码 我必须处理文本文件中的一百万个顶点 因此邻接矩阵不是解决方案 已有可用的实施吗 请帮忙 您不能将 Floyd Warshall 与邻接列表一起使用 因为当它工作时 它会产生新的边
  • 为什么我的数据库没有更新?

    我的问题是 当我编辑数据网格中的单元格时 数据库没有更新 我使用的代码如下 Public Class Form9 Inherits System Windows Forms Form Dim sql As String SELECT FRO
  • |= 运算符在 C++ 中意味着什么?

    运算符在 C 中意味着什么 假设您在整数上使用内置运算符 或在用户定义的类上使用合理重载的运算符 则这些运算符是相同的 a a b a b The 符号是按位或赋值运算符 它计算右侧 b 与左侧 a 的 或 值 并将结果分配给 a 但在执行
  • 在类路径中查找重复的类

    我有一个使用 Maven 构建的 Java 应用程序 它有很多依赖项 当执行我的测试用例时 它们有时会很好地通过 有时会因为一些不兼容的类组合而失败 所以看来类路径中必须有一些类两次是随机选取的 一个很好 另一个则不好 如何找出我的类路径中
  • 计算三角形内的格点

    我有一个大三角形的点 我们称之为 a b c a x y 等 现在我想统计这个三角形围成的区域内有多少个积分点 所以我首先看一下皮克定理 我考虑的第二种方法是生成一个以三角形的最大值 最小值为界的点列表 然后检查每个点是否位于三角形内部 我