加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?

2024-05-13

我正在尝试根据阿波罗尼乌斯图生成加权沃罗诺伊。我正在使用 CGAL 库。我找不到如何从 apollonius 获取面和顶点的好例子。 我有以下类型定义:

typedef double                                                                  NT;
typedef CGAL::Cartesian< NT>                                                    KernelCartes;
typedef CGAL::Ray_2<KernelCartes>                                               Cartes_Ray;
typedef CGAL::Line_2<KernelCartes>                                              Cartes_Line;
typedef CGAL::Segment_2<KernelCartes>                                           Cartes_Segment;
typedef std::list<Cartes_Ray>                                                   Cartes_RayList;
typedef std::list<Cartes_Line>                                                  Cartes_LineList;
typedef std::list<Cartes_Segment>                                               Cartes_SegmentList;
typedef CGAL::Point_2<KernelCartes>                                             Cartes_Point;
typedef CGAL::Apollonius_graph_traits_2<KernelCartes>                           ApoTraits;
typedef CGAL::Apollonius_graph_2<ApoTraits>                                     Apo_Graph;
typedef Apo_Graph::Site_2                                                       Apo_Site;

下面,我尝试创建 Apollonius 图。 WVD 是加权 voronoi 图 (Apo_Graph)。

    WVD.clear();
    double Weight;
    foreach(QPointF point,List_Nodes)
    {
        Weight = NewRandomNumber(1,10);
        Apo_Site k(Cartes_Point(point.x(),point.y()),Weight);
        WVD.insert(k);
    }

现在,我需要知道如何访问加权沃罗诺伊和生成的面(以及每个面的顶点)。


最后我是这样做的:

typedef CGAL::Apollonius_graph_traits_2<Kernel_Exact>             APT;
typedef CGAL::Apollonius_site_2<Kernel_Exact>                   Site_2_Apo;
typedef Site_2_Apo::Point_2                                     Site_2_Point_2;
typedef Site_2_Apo::Weight                                      Site_2_Weight;

typedef CGAL::Apollonius_graph_traits_2<Kernel_Exact>                              AGT2_K;
typedef CGAL::Apollonius_graph_2<AGT2_K>                                            AG2;
typedef CGAL::Apollonius_graph_adaptation_traits_2<AG2>                            AG2_Trait;
typedef CGAL::Apollonius_graph_caching_degeneracy_removal_policy_2<AG2>            AG2_Policy;
typedef CGAL::Voronoi_diagram_2<AG2,AG2_Trait,AG2_Policy>                          VD_AG2;

加载一些点:

std::vector<Site_2_Apo> List_Nodes;
    for (int i = 0; i<= 100; i = i++)
    {
        for(int j = 0; j <= 100; j = j++)
        {
            List_Nodes.push_back(Site_2_Apo(Site_2_Point_2(i+NewRandomNumber(0,30),j+NewRandomNumber(0,30)),Site_2_Weight(NewRandomNumber(1,50))));
        }
    }

其余的:

VD_AG2 VDA;      //Voronoi Apol 

    ///Voronoi Generation
    VDA.clear();
    VDA.insert(List_Nodes.begin(),List_Nodes.end());

以及访问面和顶点:

  for(A_Bounded_faces_iterator f = VDA.bounded_faces_begin(); f != VDA.bounded_faces_end(); f++)
    {

        A_Ccb_halfedge_circulator ec_start = (f)->ccb();
        A_Ccb_halfedge_circulator ec = ec_start;
        poly.clear();
        do {
            x = ((A_Halfedge_handle)ec)->source()->point().x();
            y = ((A_Halfedge_handle)ec)->source()->point().y();
            poly.push_back(QPointF(x,y));
        } while ( ++ec != ec_start );        
        List_Poly.push_back(poly);
    }

这是结果:

https://i.stack.imgur.com/Esv8c.png https://i.stack.imgur.com/Esv8c.png

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

加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点? 的相关文章

  • 哪些 iomanip 操纵器具有“粘性”?

    我最近在创建一个stringstream由于我错误地假设std setw 会影响每次插入的字符串流 直到我明确更改它 然而 插入后它总是被取消设置 With timestruct with value of Oct 7 9 04 AM st
  • .Net Core 中 String 默认不可序列化吗?

    我正在查看其他的 Fortify 静态分析安全测试 SAST 扫描报告 以识别和抑制误报 应用程序框架是C NET Core SAST 报告部分内容如下 Method1 在第 111 行将不可序列化的对象存储为 HttpSessionSta
  • 到底什么是“位填充”或“填充位”?

    我只是在互联网上找不到任何关于 位填充 真正含义的详细解释 并且在 Stack Overflow 上也没有找到与位填充相关的线程的任何答案 我还搜索了 ISO 9899 1990 其中提到了 位填充 但没有根据我的需要进行解释 我在网上找到
  • 除了第一列之外,Gridview 行可点击?

    我使用以下代码使 gridview 的整行可单击 protected void gridMSDS RowDataBound object sender GridViewRowEventArgs e if e Row RowType Data
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • EASTL 与 STL 相比,std::vector::operator[] 怎么会有这么大的性能差异

    根据http www open std org jtc1 sc22 wg21 docs papers 2007 n2271 html http www open std org jtc1 sc22 wg21 docs papers 2007
  • 混合 VS2012 平台工具集

    我们正在从 VS2005 切换到 VS2012 update 2 我们正在构建大量 主要是控制台 本机 C 无 MFC ATL 可执行文件 它们使用几个常见的静态链接库 这些可执行文件主要在 Win7 计算机上运行 但有些也部署在较旧的 X
  • 如何使用 ASP.NET MVC 4.0 DonutOutputCache VaryByCustom 使缓存失效

    我正在为我的 ASP NET 应用程序使用 DevTrends MvcDonutCaching 包 它工作得很好 我目前遇到的一个问题是使我为子操作设置的 VaryByCustom 缓存无效 这是我用于 VaryByCustom 设置的一些
  • C# 列表框 ObservableCollection

    我正在尝试使用 ListBox DataSource ObservableCollection 但是我不知道如何在 OC 更新时让列表框自动更新 我可以在 OC 上挂接 CollectionChanged 事件 但是我需要对列表框执行什么操
  • 如何解决素数函数的大O表示法?

    我正在尝试理解 Big O 表示法 很抱歉 如果我问的问题太明显了 但我似乎无法理解这一点 我有以下 C 代码函数 我正在尝试为其计算 Big O 表示法 for i 2 i lt 100 i for j 2 j lt i j j if i
  • 如何在单独的类库中管理客户端上下文对象?

    我正在尝试创建一个库 类库 对于共享点 它将拥有所有共享点 dll 来与共享点服务器交互上传文件 文档并创建文档库和文档集 现在这个库可以被使用客户端 例如 Web 应用程序 asp net webform 或 mvc 或控制台应用程序或
  • XPath 选择具有特定属性值的元素?

    我在使用 XPath 选择节点时遇到问题 我将展示一个示例 由于实际数据量很大 xml 文件被缩短了 这是 XML 的子集
  • Facebook Graph API“/userid/feed”返回空白

    我正在使用 Facebook C SDK 但似乎无法使用 Graph API 获取反馈数据 我已从用户那里获得了以下扩展权限 范围 离线访问 publish stream publish checkins create event read
  • std::regex 转义正则表达式中使用的特殊字符

    我是字符串来创建一个std regex FILE 作为单元测试的一部分 检查一些打印文件名的异常输出 在 Windows 上失败并显示 regex error error escape 表达式包含无效的转义字符或尾随转义 因为 FILE 宏
  • STL 向量、迭代器和插入 (C++)

    我有一个将向量的迭代器传递到的方法 在这个方法中 我想向向量中添加一些元素 但我不确定当只有迭代器时这是否可行 void GUIComponentText AddAttributes vector
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果
  • TypeScript 中 C# 类虚拟成员的等效项

    因此 在 C 中 当我创建模型类和延迟加载内容时 我会执行以下操作 public int User ID get set public int Dept ID get set 然后在我的班级稍远一点的地方 我像这样弹出我的虚拟 public
  • MsBuild 在 Visual Studio Online 上找不到恢复的 NuGet 包

    我尝试构建一个存储在 Visual Studio Online 上的外部 GIT 存储库中的解决方案 它有以下步骤 1 Git 恢复 有效 2 NuGet 恢复 有效 3 构建 不起作用 查看日志时我的第一个猜测是 MsBuild 没有查找

随机推荐