博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求点是否在三角形内
阅读量:5154 次
发布时间:2019-06-13

本文共 1053 字,大约阅读时间需要 3 分钟。

问题:

在一个屏幕上如何判断一次点击,在一个三角形的按钮内?

解决方法:

在编程之美上提供了2种方法,一种是求面积的方法,一种是点关系的矢量方法。其实两种方法的代码实现几乎相同,但考虑到效率问题,矢量法比较合适。在求面积的方法中用到了除法和开平方运算,矢量法却没有,但它有一个非常要注意的地方,即三角形的三个顶点必须是按逆时针顺序方向排列传入函数体。

矢量法:如果一个点在三角形内,则按照逆时针方向,这个点都在3条边的左边。判断一个点D,是否在一条射线a,b的左边,可以通过a->b,a->D两个向量叉积的正负来判断,叉积为正D在ab的左边,叉积为0在射线ab上,否则在外。

具体代码如下:

#include 
using namespace std;typedef struct _Point{ double x; double y;};//A,B,C是一个三角形顶点的逆时针顺序,其位置顺序不能更改//如果D在三角形之外,就是没有点中这个三角形的按钮,函数返回false,否则为truedouble PhasorCompare(const _Point& A, const _Point& B, const _Point& C){ return (B.x - A.x)*(C.y - A.y) - (B.y - A.y)*(C.x - A.x);}bool IsInTriangle(const _Point& pointA, const _Point& pointB, const _Point& pointC, const _Point& pointD){ if (PhasorCompare(pointA, pointB, pointD) >= 0.0 && PhasorCompare(pointB, pointC, pointD) >= 0.0 && PhasorCompare(pointC, pointA, pointD) >= 0.0){ return true; } return false;}

ps:发现在手持设备上很多游戏的按钮都设计成方型或圆形,至于其它形状的按钮确很少见,当然按钮的形状越复杂,估计计算量会大吧。如果需要对一个不规则形状的按钮进行精确判断是否点击中时,该如何做呢?希望以后能找到很好的方法。

转载于:https://www.cnblogs.com/cluster/archive/2011/09/06/2169310.html

你可能感兴趣的文章
[转] C语言的谜题
查看>>
Java中的日期和时间
查看>>
禁用windows2000.2003启动时的CTRL+ALT+DEL
查看>>
Django基于admin的stark组件创建(一)
查看>>
快速幂 模板及应用
查看>>
批处理/DOS命令删除文件夹下某类型的文件
查看>>
模板 - 数学 - 矩阵快速幂
查看>>
优秀的持久层框架Mybatis,连接数据库快人一步
查看>>
线段树 延迟更新
查看>>
CentOS的IP配置专题
查看>>
基于WCF大型分布式系统的架构设计
查看>>
Cisco & H3C 交换机 DHCP 中继
查看>>
人脸识别技术及应用,二次开发了解一下
查看>>
理解CSS中的BFC(块级可视化上下文)[译]
查看>>
身份证号码的合法性校验
查看>>
Python基础--通用序列操作
查看>>
[CERC2017]Intrinsic Interval[scc+线段树优化建图]
查看>>
DevExpress DXperience Universal 11.1.6 下载+源码+编译+汉化流程+升级+替换强名
查看>>
Bat文件注册组件
查看>>
Autoit 3 常用的语句
查看>>