判定点是否在不规则多边形内部的问题

简介:

问题如下:

?
1
2
3
4
话说在平面内有一个任意的不规则的封闭多边形,另外在这个平面内还有一个点,问题:如何高效的判定这个点是在这个多边形内部还是外部?
 
补充:
什么是任意的呢?也就是说想让他是啥样就啥样,只要是封闭的多边形就好。为了简化题目,明确这个点不在多边形的线上。
当然,熟悉谷歌和度娘的同学已经搜到了各种正确的不正确的、国内的国外的解法。当然有些参加过ACM比赛的同学在学习、训练或者比赛中,可能也碰到了这个问题。

偶对自己不加思考就直接搜索的表示遗憾,因为你失去了一次自我提升的机会。

正如一位回答者所述,“弄一个蚊香的你给算算看?”,因为题目,本身就说了是任意的,所以,弄成蚊香形状也是符合题意的。

此题本要碰到时,想了若干种方案,有些与答案相同,有的不相同。现在拿一个不太相同的出来与大家分享,个人感觉效率应该是非常高的,大家拍砖轻点,呵呵。

偶把任意形状的多边形,比做用钉子卡住的橡皮筋,想怎么改变形状,只要增加更多的橡皮筋即可。但是偶一个一个的拔掉钉子,到钉子数变成3个的时候,它就是个三角形,然后结果就转变成点是不是在三角形内部的问题。

当然,在拔钉子的时候,要注意一件事情,就是如果这个点刚好在拔掉钉子与边上两个钉子构成的三角形当中,就先不拔这个钉子,因为其影响结果的正确。

还有就是,如果在拔钉子的时候,导致相临的3个点,变成一条直线了,就把中间一个点去掉,这可以避免最后形成的是三点一线,而不是一个三角形。

OK,算法的思路就算出来了,可以做一个递归,每次做一圈,去掉可以去掉的钉子,直到还有3个钉子。

设有n个钉子,最后总是去掉n-3个钉子,就可以判定出结果了。所以时间复杂度是O(n)。


相关文章
|
4天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
2天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。
|
3天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
4天前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
901 4
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
|
6天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
588 2
|
4天前
|
JavaScript API 开发工具
如何在原生App中调用Uniapp的原生功能?
如何在原生App中调用Uniapp的原生功能?
298 139
|
5天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
283 90
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践