Skip to content

服务器托管,北京服务器托管,服务器租用-价格及机房咨询

Menu
  • 首页
  • 关于我们
  • 新闻资讯
  • 数据中心
  • 服务器托管
  • 服务器租用
  • 机房租用
  • 支持中心
  • 解决方案
  • 联系我们
Menu

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

Posted on 2023年9月19日 by hackdl

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

以下图为例说明问题:

原理:

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

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

切记:

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

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

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

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

 实现的golang代码如下:

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; i0 && nCurCrossProduct*nLastValue{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)
}

服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net

Related posts:

  1. 精通服务器托管的三大技巧
  2. 全球服务器托管数据中心排名榜单
  3. 三天吃透计算机网络面试八股文
  4. 探究VPS价格高于托管服务器的原因
  5. 广州服务器租用服务全面覆盖

服务器托管,北京服务器托管,服务器租用,机房机柜带宽租用

服务器托管

咨询:董先生

电话13051898268 QQ/微信93663045!

上一篇: 经典书籍
下一篇: synchronized(this)理解

最新更新

  • SonarQube系列-架构与外部集成
  • 说透MySQL:从数据结构到性能优化,附实际案例和面试题
  • 产品经理如何使用集简云实现工作流程自动化?
  • GaussDB技术解读系列:运维自动驾驶探索
  • springboot高级教程基于 redis 通过注解实现限流

随机推荐

  • 双线服务器托管:价格实惠的选择
  • 南京服务器托管诚招代理
  • 高效管理数据:数据库服务器托管探析
  • 服务器托管中小企业
  • Spring Boot集成全局唯一ID生成器 Ui

客服咨询

  • 董先生
  • 微信/QQ:93663045
  • 电话:13051898268
  • 邮箱:dongli@hhisp.com
  • 地址:北京市石景山区重聚园甲18号2层

友情链接

  • 服务器托管
  • 机房租用托管
  • 服务器租用托管
©2023 服务器托管,北京服务器托管,服务器租用-价格及机房咨询 京ICP备13047091号-8