C#凹多边形求内心

这篇具有很好参考价值的文章主要介绍了C#凹多边形求内心。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在计算凹多边形内心时,一种常见的方法是使用三角剖分和重心法。您可以按照以下步骤进行:

  1. 将凹多边形进行三角剖分,得到一系列三角形。
  2. 对每个三角形计算其重心,重心是三个顶点的平均值。
  3. 将所有三角形的重心进行平均,得到凹多边形的内心。

以下是一个简单的示例代码,演示了如何在C#中实现这一过程:文章来源地址https://www.toymoban.com/news/detail-822478.html

using System;
using System.Collections.Generic;
using System.Drawing;

class Program
{
    static void Main()
    {
        List<PointF> concavePolygon = new List<PointF>
        {
            new PointF(0, 0),
            new PointF(5, 0),
            new PointF(3, 3),
            new PointF(1, 5),
            new PointF(0, 3)
        };

        PointF incenter = CalculateIncenter(concavePolygon);
        
        Console.WriteLine($"Incenter: ({incenter.X}, {incenter.Y})");
    }

    static PointF CalculateIncenter(List<PointF> polygon)
    {
        PointF incenter = new PointF(0, 0);
        double totalArea = 0;

        for (int i = 1; i < polygon.Count - 1; i++)
        {
            PointF p1 = polygon[0];
            PointF p2 = polygon[i];
            PointF p3 = polygon[i + 1];

            double area = CalculateTriangleArea(p1, p2, p3);
            totalArea += area;

            incenter.X += (float)((p1.X + p2.X + p3.X) / 3 * area);
            incenter.Y += (float)((p1.Y + p2.Y + p3.Y) / 3 * area);
        }

        incenter.X /= (float)totalArea;
        incenter.Y /= (float)totalArea;

        return incenter;
    }

    static double CalculateTriangleArea(PointF p1, PointF p2, PointF p3)
    {
        return 0.5 * Math.Abs((p1.X * (p2.Y - p3.Y) + p2.X * (p3.Y - p1.Y) + p3.X * (p1.Y - p2.Y)));
    }
}

到了这里,关于C#凹多边形求内心的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

    使用基于C++的OpenCV库来绘制多边形,并且为多边形的不同边使用不同的颜色,可以按照以下步骤进行操作: 首先,确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件: 创建一个空白的图像,然后绘制多边形,并为每条边选择不同的颜色: 在这个示例中,

    2024年02月13日
    浏览(28)
  • 计算两个多边形的交集

    已知两个多边形Polygon1和Polygon2,分别由点集C1={P1,P2,...,Pm}和C2={Q1,Q2,...,Qn}表示,求这两个多边形的交集。 两个多边形相交后,其顶点要么是两个多边形边的交点,要么是在多边形内部的点。 计算两个多边形每条边之间的交点。 计算包含在多边形内部的点。 将交点和多边形内

    2024年02月12日
    浏览(48)
  • 多边形边的插值

    算法描述及提问: 给定一个最小长度,对多边形的每一条边不断的对半插值,使得插值后的每一条边都要不大于最小长度。 测试ChatGPT - 中文版 VSCode插件。 显然是错误的。 正确的结果: 使用ChatGPT-中文版 VSCode,基本可以写出一个简单的算法,但是正确与否还需要个人Debug及

    2024年02月12日
    浏览(45)
  • 使用OpenCV的函数polylines()绘制多条相连的线段和多边形;使用函数fillPoly()绘制带填充效果的多边形

    函数polylines()可用来根据点集绘制多条相连的线段,也可用来绘制多边形。 函数polylines()有两种原型,这里只向大家介绍比较常用的那种原型。 函数polylines()的C++原型如下: 函数polylines()的Python原型如下: 函数polylines()的参数意义如下: img—绘制的多条相连线段或多边形所在

    2024年02月04日
    浏览(41)
  • CAD泰森多边形框架3D插件

    CAD泰森多边形框架3D插件可用于在AutoCAD软件内生成三维Voronoi框架结构实体模型,适用于多孔Voronoi科研论文渲染绘图、Voronoi框架有限元建模、Voronoi空间结构优化等方面的应用。 插件可设置生成的几何尺寸、晶格尺寸及边框直径等信息。 插件可同时生成实体框架及线条框架两

    2024年02月11日
    浏览(35)
  • 利用fabric绘画矩形和多边形

    需求在一张图片上标注矩形和多边形,支持回显; fabric版本:4.6.0; Fabric.js 是一个功能强大且操作简单的 Javascript HTML5 canvas 工具库。 官方文档 参考链接 组件代码drawer.vue createUuid 是为了让每一个图形有自己的id;方便用于获取用户点击的那个图形等操作; defaultRectStyle、d

    2024年02月08日
    浏览(44)
  • 计算两个多边形的最近距离(MATLAB)

            本文意在介绍关于计算两组坐标点的最近距离的简单方法,可用此方法来计算两个多边形的最近距离以及距离最近的两个点。下面展示具体实例。 函数代码         该函数可以比较快速的计算两组坐标点之间的最小距离,并返回相应的坐标。缺点是只能计算整数

    2024年02月08日
    浏览(33)
  • JTS多边形自相交异常问题处理

    遇到一个奇怪的问题,线上某户型导入报了个异常com.vividsolutions.jts.geom.TopologyException: found non-noded intersection between LINESTRING。 看日志定位问题出在计算两柜体是否相交的方法上 从逻辑上讲写的没问题,然后本地验证了下,发现是JTS自身报的异常   看了下报错信息的含义,是说

    2024年02月12日
    浏览(29)
  • cesium学习记录08-鼠标绘制多边形

    上一篇学习了创建实体的一些基础知识,但有时还需要我们使用鼠标进行手动绘制,这一篇就来进行鼠标绘制实体的实现(点,线,矩形,圆,多边形)。 (这里需要掌握三个知识点,一是上一篇中的创建实体、二是鼠标事件、三是回调函数) 既然是鼠标绘制,自然离不开

    2024年02月12日
    浏览(28)
  • Openlayers实战:绘制点、线、圆、多边形

    Openlayers地图中,绘制图形是非常重要的一个功能。Openlayers主要使用draw类来绘制图形,在实际项目中经常会绘制点、线、多边形、矩形等。 下面的示例是绘制点、线、圆形、多边形。

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包