前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >多边形几何

多边形几何

作者头像
sofu456
发布于 2019-07-09 06:15:33
发布于 2019-07-09 06:15:33
47000
代码可运行
举报
文章被收录于专栏:sofu456sofu456
运行总次数:0
代码可运行

任意多边形几何中心

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Point Center
        {
            get
            {
                Point ptCenter = new Point();
                int i, j;
                double ai, atmp = 0, xtmp = 0, ytmp = 0;
                if (m_LogicPoints.Count == 1)
                    return m_LogicPoints[0];
                if ((m_LogicPoints.Count == 2) || (m_LogicPoints.Count == 3 && m_LogicPoints[0] == m_LogicPoints[2]))
                    return new Point() { X = (m_LogicPoints[1].X + m_LogicPoints[0].X) / 2, Y = (m_LogicPoints[1].Y + m_LogicPoints[0].Y) / 2 };

                int n = m_LogicPoints.Count;
                for (i = n - 1, j = 0; j < n; i = j, j++)
                {
                    ai = m_LogicPoints[i].X * m_LogicPoints[j].Y - m_LogicPoints[j].X * m_LogicPoints[i].Y;
                    atmp += ai;
                    xtmp += (m_LogicPoints[j].X + m_LogicPoints[i].X) * ai;
                    ytmp += (m_LogicPoints[j].Y + m_LogicPoints[i].Y) * ai;
                }

                if (atmp != 0)
                {
                    ptCenter.X = Convert.ToInt32(xtmp / (3 * atmp));
                    ptCenter.Y = Convert.ToInt32(ytmp / (3 * atmp));
                }
                return ptCenter;
            }
        }

线段相交

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public bool isColide(Line line)//判断是否相交,直线p1p2与线段p3p4
        {
            //判处端点
            if (this.V0 == line.V0 || this.V0 == line.V1 || this.V1 == line.V0 || this.V1 == line.V1)
                return false;

            double deviation = 0.1;//允许误差
            //排斥试验,判断p1p2在q1q2为对角线的矩形区之外
            if (Math.Max(line.V0.X, line.V1.X) < Math.Min(this.V0.X, this.V1.X)- deviation)
            {//P1P2中最大的X比Q1Q2中的最小X还要小,说明P1P2在Q1Q2的最左点的左侧,不可能相交。
                return false;
            }

            if (Math.Min(line.V0.X, line.V1.X) > Math.Max(this.V0.X, this.V1.X)+ deviation)
            {//P1P2中最小的X比Q1Q2中的最大X还要大,说明P1P2在Q1Q2的最右点的右侧,不可能相交。
                return false;
            }

            if (Math.Max(line.V0.Y, line.V1.Y) < Math.Min(this.V0.Y, this.V1.Y)- deviation)
            {//P1P2中最大的Y比Q1Q2中的最小Y还要小,说明P1P2在Q1Q2的最低点的下方,不可能相交。
                return false;
            }

            if (Math.Min(line.V0.Y, line.V1.Y) > Math.Max(this.V0.Y, this.V1.Y)+ deviation)
            {//P1P2中最小的Y比Q1Q2中的最大Y还要大,说明P1P2在Q1Q2的最高点的上方,不可能相交。
                return false;
            }

            //跨立试验
            var crossP1P2Q1 = Cross(line.V0, line.V1, this.V0);
            var crossP1Q2P2 = Cross(line.V0, this.V1, line.V1);
            var crossQ1Q2P1 = Cross(this.V0, this.V1, line.V0);
            var crossQ1P2Q2 = Cross(this.V0, line.V1, this.V1);

            return (crossP1P2Q1 * crossP1Q2P2 >= 0 || Math.Abs(crossP1P2Q1 * crossP1Q2P2) < 0.01) && (crossQ1Q2P1 * crossQ1P2Q2 >= 0 || Math.Abs(crossQ1Q2P1 * crossQ1P2Q2) < 0.01);
        }

参考: https://zh.wikipedia.org/wiki/几何中心 https://blog.csdn.net/xxdddail/article/details/70264399

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年03月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
计算几何算法概览
  计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。在本文中,我们将对计算几何常用的基本算法做一个全面的介绍,希望对您了解并应用计算几何的知识解决问题起到帮助。
owent
2023/03/05
1.6K0
VB.NET 实现屏幕取色器20210924
 RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。
办公魔盒
2021/09/30
2.1K0
VB.NET 实现屏幕取色器20210924
百度地图电子围栏功能
今年疫情以来,工作都比较紧凑,没能抽出时间来记录工作日常了。最近接触一个项目需要使用到百度地图的围栏功能,作为前期调研,先探探路。 经过一番搜搜,找到一篇不错的文章。专门介绍,百度地图围栏的。地址如下:https://www.cnblogs.com/CherishTheYouth/p/CherishTheYouth_20190416.html
用户5640963
2020/10/26
4.1K0
百度地图电子围栏功能
一个多边形内部有3枚钉子_多边形的内部和外部
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 24 Accepted Submission(s) : 7 Problem Description Statement of the Problem Several drawing applications allow us to draw polygons and almost all of them allow us to fill them with some color. The task of filling a polygon reduces to knowing which points are inside it, so programmers have to colour only those points. You’re expected to write a program which tells us if a given point lies inside a given polygon described by the coordinates of its vertices. You can assume that if a point is in the border of the polygon, then it is in fact inside the polygon.
全栈程序员站长
2022/09/22
5820
理解点线拓扑关系的计算原理
由于业务需要,我学习了判断点与点、点与线、线与线的关系的算法、理论,这里汇总下,主要内容有:
sunsky
2022/09/08
7780
算法 - PNPoly解决点和多边形问题
计算点到多边形最短距离的基本原理是:依次计算点到多边形每条边的距离,然后筛选出最短距离。
用户2987604
2020/06/15
2.5K0
算法 - PNPoly解决点和多边形问题
二维几何基础
1. 点、线、凸边形 /******************************************************* 二维几何基础 【注意】数组下标从1开始。 *******************************************************/ #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <ioma
hotarugali
2022/03/01
6360
位置和方向的世界,计算几何的基本问题
本文从最基本的线段相交问题出发,从解析几何进入计算几何,介绍点积和叉积这个最基本的计算几何工具,引入计算几何这个关于位置和方向的大航海世界~
ACM算法日常
2020/06/29
9210
ACM计算几何篇_acm数学
https://linxi99.gitee.io/20190211/ACM计算几何篇/
全栈程序员站长
2022/11/19
1.4K0
ACM计算几何篇_acm数学
LeetCode Weekly Contest 32解题思路
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/71948763
用户1147447
2019/05/26
4270
网易校招真题三
题目描述 又到了丰收的季节,恰逢小易去牛牛的果园里游玩。 牛牛常说他对整个果园的每个地方都了如指掌,小易不太相信,所以他想考考牛牛。 在果园里有N堆苹果,每堆苹果的数量为ai,小易希望知道从左往右数第x个苹果是属于哪一堆的。 牛牛觉得这个问题太简单,所以希望你来替他回答。 输入描述: 第一行一个数n(1 <= n <= 105)。 第二行n个数ai(1 <= ai <= 1000),表示从左往右数第i堆有多少苹果 第三行一个数m(1 <= m <= 105),表示有m次询问。 第四行m个数qi,表示小易希望知道第qi个苹果属于哪一堆。 输出描述: m行,第i行输出第qi个苹果属于哪一堆。
Tim在路上
2020/08/04
7620
Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题
J. Polygons Intersection time limit per test:2 seconds memory limit per test:64 megabytes input:standard input output:standard output We will not waste your time, it is a straightforward problem. Given multiple polygons, calculate the area of their interse
Angel_Kitty
2018/04/09
7920
Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题
多边形求交
两个多边形求交的实现需要几个模块 (cgal中有insect函数,但是必须要求使用CGAL::Exact_predicates_exact_constructions_kernel) 本人出于其他想法,没有把基于Exact_predicates_inexact_constructions_kernel核的Polygon_2转换为 Exact_predicates_exact_constructions_kernel的核,而是自己写了一个求交函数自用.
用户3519280
2023/07/06
2660
几何算法:判断两条线段是否相交
一条线段两个点,可以列出一个两点式(x - x1) / (x2 - x1) = (y - y1) / (y2 - y1)),两条线段是两个两点式,这样就是 二元一次方程组 了 ,就能求出两条直线的交点。
前端西瓜哥
2023/08/18
9650
几何算法:判断两条线段是否相交
一种快速判断点在多边形内的算法
前面我们讲到,射线法的主要思路就是计算射线穿越多边形边界的次数。那么对于点在多边形的边上这种特殊情况,射线出发的这一次,是否应该算作穿越呢?
sunsky
2022/09/08
1.3K0
丘比特的箭(点是否在面内)- HDU 1756
对于点A是否在多边形P内的判定, 一般有两种方法:射线法和转角法。 这里介绍一下射线法。
ACM算法日常
2018/08/07
9790
丘比特的箭(点是否在面内)- HDU 1756
判断点在多边形内算法的C++实现
判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。如下图所示:
charlee44
2019/08/13
6.1K0
一分钟教你在博客园中制作自己的动态云球形标签页
经常看到别人的博客里面有动态的云标签页,感觉很是高大上,自己也很像弄一个。于是去找寻源码,在阿里西西页面特效中找到了云标签的源码,经过分析和解剖,弄成了符合博客园的js.   首先,找到博客园页面的管
用户1154259
2018/01/18
1.3K0
一分钟教你在博客园中制作自己的动态云球形标签页
原生JS实现球面展示特效
分享一个由原生JS实现的球面展示效果,效果如下: 实现代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type"
越陌度阡
2020/11/26
12.1K0
原生JS实现球面展示特效
挑战程序竞赛系列(3):2.3需要思考的动规
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/71475303
用户1147447
2019/05/26
4580
相关推荐
计算几何算法概览
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验