如何判断一个点是否在凸多边形内 - golang

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

判断一个点是否在凸多边形内的方法很多,此处仅给出使用向量叉积法判断点是否在凸多边形内的方法。

以下图为例说明问题:

如何判断一个点是否在凸多边形内 - golang

原理:

1. 将多边形的第 i 条边的第一个顶点指向点 P 得到向量 v1,然后将从第一个顶点指向第二个顶点得到向量 v2,叉乘这两个向量。

2. 如果叉乘结果与上一条边的叉乘结果的乘积大于 0 则继续执行;如果乘积小于 0,表示点 P 不在凸多边形内,直接返回即可。

切记

此种办法只能用来判断凸多边形,且要求凸多边形的点以固定的顺序给出,例如固定为逆时针或顺时针。

C++语言版本的实现,请参考我的这篇博客

如何判断一个点是否在凸多边形内 - C++_YZF_Kevin的博客-CSDN博客

golang语言的实验结果如下图,main函数最后有判断几个点是否在多边形中的举例

如何判断一个点是否在凸多边形内 - golang

 实现的golang代码如下:文章来源地址https://www.toymoban.com/news/detail-466732.html

package main

import (
   "fmt"
)

type Point struct {
   X float64
   Y float64
}
func (p *Point) GetX() float64 { return p.X }
func (p *Point) GetY() float64 { return p.Y }

// point1和point2的向量
func SubPoint(point1 *Point, point2 *Point) *Point{
   return &Point{
      X: point1.GetX() - point2.GetX(),
      Y: point1.GetY() - point2.GetY(),
   }
}

// 向量积(叉乘)
func CrossProduct(point1 *Point, point2 *Point) float64 {
   return point1.GetX()*point2.GetY() - point2.GetX()*point1.GetY()
}

// 判断一个点是否在多边形内
func IsPointInConvexPolygon(aPoints []*Point, vTarget *Point) bool {
   if len(aPoints) == 0 {
      return false
   }

   var nCurCrossProduct   float64
   var nLastValue           float64

   for i:=0; i<len(aPoints); i++ {
      vU := SubPoint(vTarget, aPoints[i])
      nNextIndex := (i + 1) % len(aPoints)
      vV := SubPoint(aPoints[nNextIndex], aPoints[i])
      nCurCrossProduct = CrossProduct(vU, vV)
      if i>0 && nCurCrossProduct*nLastValue<= 0 {
         return false
      }
      nLastValue = nCurCrossProduct
   }

   return true
}

func main() {
   // 多边形的顶点坐标
   polygon := []*Point{{0, 0}, {0, 1158}, {346, 1345}, {750, 1118}, {750, 0}} 

   bSuc1 := IsPointInConvexPolygon(polygon, &Point{350, 1160})
   fmt.Println("bSuc1=",bSuc1)

   bSuc2 := IsPointInConvexPolygon(polygon, &Point{2, 1190})
   fmt.Println("bSuc2=",bSuc2)

   bSuc3 := IsPointInConvexPolygon(polygon, &Point{749, 1118})
   fmt.Println("bSuc3=",bSuc3)
}

到了这里,关于如何判断一个点是否在凸多边形内 - golang的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内

    要根据经纬度判断一个坐标是否在一个多边形区域内,MySQL提供了几种函数来处理地理空间数据,其中包括用于处理多边形区域的函数。 首先,创建一个表来存储多边形区域。可以使用 ST_GeomFromText 函数将多边形的坐标转换为地理空间对象。我们给他插入两条数据,默认id第一

    2024年02月08日
    浏览(31)
  • 如何判断两个多边形是否相交?——多边形相交判定算法详解

    如何判断两个多边形是否相交?——多边形相交判定算法详解 在计算机图形学中,判断两个多边形是否相交是一项很重要的任务。这涉及到各种应用场景,如碰撞检测、模拟物理效果等。在本篇文章中,我们将会介绍多边形相交判定算法的相关知识和实现方式。 首先,我们

    2024年02月14日
    浏览(36)
  • python 如何判断点是否在多边形(三角形)内,或求点在3D面上的投影?

    方法1: 用shapely中的geometry包 1)polygon.covers(point) 如果point在多边形polygon上(包括边),返回True,否则False。 2)polygon.contains(point) 如果point在多边形polygon上(不包括边),返回True,否则False。 方法2: 用blender的内置python api。 将点投影到三角形平面上,并检查其是否在三角形

    2023年04月09日
    浏览(34)
  • 百度地图API:JavaScript开源库几何运算判断点是否在多边形内(电子围栏)

    漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案 漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关 漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标 漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的

    2024年02月07日
    浏览(51)
  • opencv 判断点在多边形内外

            基于Python 和 OpenCV 画出多边形,以及判断某个点是不是在多边形内。         函数定义:cv2.pointPolygonTest(contour, pt, measureDist)         函数功能:找到图像里的点和轮廓之间的最短距离. 它返回的距离当点在轮廓外的时候是负值,当点在轮廓内是正值,如果

    2024年02月12日
    浏览(36)
  • 判断点在多边形内算法的C++实现

    本篇博客介绍了使用射线法判断点在多边形内部还是外部的算法,并通过C++做了具体实现 1. 算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这

    2024年02月12日
    浏览(36)
  • 【计算几何】判断多边形边界顺逆时针 & C++代码实现

    多边形可以由一个点集 { v 1 , v 2 , . . . , v n } {v_1,v_2,...,v_n} { v 1 ​ , v 2 ​ , ... , v n ​ } 表示,构成多边形的点集确定,多边形边界的顺序也就确定了 有关多边形边界的顺序的示意图,如下图所示: 有时候关于数据格式有规定,要求多边形边界必须为顺时针或者逆时针。 因

    2024年02月07日
    浏览(36)
  • hive udf 判断四边形是否为矩形

    hive udf中经常要做判断四边形是否为矩形,所以写了这个udf如下:

    2024年02月12日
    浏览(27)
  • Java根据坐标经纬度计算两点距离(5种方法)、校验经纬度是否在圆/多边形区域内的算法推荐

    目录 前言 一、根据坐标经纬度计算两点距离(5种方法) 1.方法一 2.方法二 3.方法三 4.方法四 5.方法五 5.1 POM引入第三方依赖 5.2 代码 6.测试结果对比 二、校验经纬度是否在制定区域内 1.判断一个坐标是否在圆形区域内 2.判断一个坐标是否在一个多边形区域内 3.结果 总结   

    2024年02月10日
    浏览(45)
  • 如何通过矢量面(多边形)生成建筑白模?

    通过以下方法可以将矢量面(多边形)生成建筑白模。 方法/步骤 下载三维地图浏览器 http://www.geosaas.com/download/map3dbrowser.exe,安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、准备一份经纬度坐标系的建筑矢量轮廓面数据,支持

    2024年02月19日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包