【CGALDotNet】二维矢量多边形可视域计算(C#调用CGAL)

参考

CGALDotNet快速开始:https://blog.csdn.net/liqian_ken/article/details/138274933

CGAL二维可视域计算介绍:https://doc.cgal.org/latest/Visibility_2/index.html#visibility_2_introduction
CGAL相关接口:https://doc.cgal.org/latest/Visibility_2/classCGAL_1_1Triangular__expansion__visibility__2.html

示例

已知多边形ABCDEFGHIJ,多边形内有一点视点K,下面要计算K点能看到的区域。
在这里插入图片描述
代码:

using CGALDotNet;
using CGALDotNet.Polygons;
using CGALDotNetGeometry.Numerics;
using System;
using System.Collections.Generic;
using System.Linq;

namespace CTestCore31
{
    public class Program
    {
        static void Main(string[] args)
        {
            var points = new Point2d[]
             {
                new Point2d(0, 0),
                new Point2d(0, 1),
                new Point2d(3, 1),
                new Point2d(3, 2),
                new Point2d(4, 2),
                new Point2d(4, 1),
                new Point2d(8, 1),
                new Point2d(8, -1),
                new Point2d(5, -1),
                new Point2d(4, 0),
             };
            points = points.Reverse().ToArray();

            var poly = new Polygon2<EEK>(points);
            var pv = new PolygonVisibility<EEK>();

            var pt = new Point2d(0.5, 0.5);
            pv.ComputeVisibility(pt, poly, out Polygon2<EEK> result);

            List<Point2d> resultPoints = new List<Point2d>();
            result.GetPoints(resultPoints);
            foreach (Point2d point in resultPoints)
            {
                Console.WriteLine($"{point.x} {point.y}");
            }
            Console.ReadLine();
        }
    }
}

由此获得可视域多边形,其坐标:

3 1
0 1
0 0
4 0
8 -0.5714285714285714
8 1
4 1
4 1.2000000000000002

根据需要将其绘制出来,如下图所示:
在这里插入图片描述

将上面两张图叠加(绿色区域为视点K的可视域):
在这里插入图片描述

注意

视点必须位于多边形内部,不能位于外部(计算结果为null)或多边形边界上(报错)。

相关推荐

  1. C++:调用对象

    2024-04-30 07:48:01       12 阅读
  2. 数组调整

    2024-04-30 07:48:01       38 阅读
  3. C# —— 数组

    2024-04-30 07:48:01       9 阅读
  4. C语言数组

    2024-04-30 07:48:01       44 阅读
  5. C++数组(3)

    2024-04-30 07:48:01       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-30 07:48:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-30 07:48:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-30 07:48:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-30 07:48:01       20 阅读

热门阅读

  1. Android 学习 鸿蒙HarmonyOS 4.0 第六章(TS中的函数)

    2024-04-30 07:48:01       13 阅读
  2. 如何实现瀑布流排列方式

    2024-04-30 07:48:01       18 阅读
  3. 零知识证明与同态加密:隐私计算的双剑

    2024-04-30 07:48:01       14 阅读
  4. firefox 浏览器常见问题(技巧)总结

    2024-04-30 07:48:01       12 阅读
  5. conda的一些问题

    2024-04-30 07:48:01       11 阅读
  6. (一)Python3接口自动化测试,request https工具类

    2024-04-30 07:48:01       12 阅读
  7. 摇杆控制电机

    2024-04-30 07:48:01       15 阅读