java矩形翻转_如何判断一个点在旋转后的矩形中

前言

最近在做的一款游戏中,用到点与旋转矩形的判定来获得一个选中的物体。在此做个记录

AAffA0nNPuCLAAAAAElFTkSuQmCC

如图所示,黄色的颜料屏是旋转的,如果不做处理直接判断点是否在矩形中,那么点击红点的位置会判定为选中物体。显然这是不对的。

如果物体没有旋转,判断方法就很简单了。

static isPositionInRect(point: cc.Vec2, rect: cc.Rect) {

return point.x <= rect.x + rect.width/2 && point.x >= rect.x - rect.width/2 && point.y <= rect.y + rect.height /2&& point.y >= rect.y - rect.height /2;

}

我这个矩形锚点为为(0.5,0.5),如果锚点不是(0.5,0.5)可以自行修改。

但是判断一个点在旋转后的矩形中就没有这么简单了。

怎么判断呢?

首先我想到的是WebGL编程指南第92页讲到的内容。(x,y)在旋转O角度后得到(x2,y2)

x2 = x * cos(O) - y * sin(O)

y2 = x * sin(O) + y * cos(O)

得到了这个公式,我们接下来就是要旋转触摸点了。不过这个时候我们要确定要绕哪个点旋转,是坐标系的原点吗?不是的,而是我们要碰撞的矩形的中心点,因为矩形是绕这个点旋转的。

AAffA0nNPuCLAAAAAElFTkSuQmCC

最终我们得到一个完整的判定函数

/**

* 判断点是否在旋转后的矩形中

* @param point 触摸点的坐标

* @param node 碰撞节点,锚点必须为(0.5,0.5)

*/

static isPosInRotationRect(point: cc.Vec2, node: cc.Node) {

let hw = node.width / 2;

let hh = node.height / 2

let O = node.angle;

let center = node.position;

let X = point.x

let Y = point.y

let r = -O * (Math.PI / 180)

let nTempX = center.x + (X - center.x) * Math.cos(r) - (Y - center.y) * Math.sin(r);

let nTempY = center.y + (X - center.x) * Math.sin(r) + (Y - center.y) * Math.cos(r);

if (nTempX > center.x - hw && nTempX < center.x + hw && nTempY > center.y - hh && nTempY < center.y + hh) {

return true;

}

return false

}

这里边需要注意的是角度O我们用的是反方向的。因为我们判定使用的矩形的坐标和宽高是未旋转的,也就是下图的红色框。所以我们的触摸点需要反方向旋转角度O才能使用之前的判定方法。

AAffA0nNPuCLAAAAAElFTkSuQmCC

当你点击了1的位置,经过反方向的旋转后会到达2的位置,然后与红色框的矩形判断,才会得到正确的判定结果。如果触摸点旋转的角度与矩形旋转的角度相同,那么点击1的位置就会向左移动,也会判定为选中,就会得到不正确的结果了。

结语

以上就是如何判定一个点在旋转后的矩形中的一种方式。在网上搜索的时候发现有很多种实现方式,但是感觉都比较繁琐。有兴趣的小伙伴可以自己去研究研究。不过用我这个判定函数已经可以达到目的了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openssl 生成证书_CentOS7 httpd(Apache)SSL 证书部署

在之前我的文章中我已经搭建了nextcloud服务器&#xff0c;现在我们需要通过域名及https访问怎么办1. 进行了简单的httpd设置后&#xff0c;就可以为网站添加SSL证书功能了。2. 首先得获取证书&#xff0c;有了证书才能添加。我们采用本地上传的方式将SSL证书上传到CentOS上。获…

FJ的字符串java问题_蓝桥杯VIP试题 之 基础练习 FJ的字符串- JAVA

问题描述FJ在沙盘上写了这样一些字符串&#xff1a;A1 “A”A2 “ABA”A3 “ABACABA”A4 “ABACABADABACABA”… …你能找出其中的规律并写所有的数列AN吗&#xff1f;输入格式仅有一个数&#xff1a;N ≤ 26。输出格式请输出相应的字符串AN&#xff0c;以一个换行符结束。…

java编写系统登录界面_java 登陆界面怎么写,连接数据库后

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼界面是package 界面类;import javax.jws.soap.SOAPBinding.Use;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing…

我的世界seus光影java版下载_我的世界0.17SEUS PE光影材质包(水反高清)下载

我的世界0.17SEUS PE光影材质包已经震撼发布&#xff0c;随着我的世界pe0.17系列版本疯狂的出现&#xff0c;很多玩家都有点开始不适应了&#xff0c;毕竟这个更新的频率和速度太快了&#xff0c;0.16.0版本还没有玩够了&#xff0c;下面给大家提供我的世界0.17SEUS PE光影材质…

针式打印机风格英文字体_可爱漂亮的圣诞节和新年贺卡艺术字体推荐!

圣诞节即将到来&#xff0c;各种相应的促销活动和宴会搞起来&#xff0c;今天macz小编为您带来几款风格可爱漂亮的圣诞节和新年贺卡艺术字体推荐&#xff01;可以用于卡片、海报、邀请函、徽标、产品介绍、T恤等&#xff0c;效果魅力非常哦&#xff01;可爱漂亮的圣诞节和新年贺…

miniui展示日历能点击_2020年日历设计,除了366天有新字体,还有新形式

点击上方蓝字&#xff0c;把我设置为星标☆吧今天是12月1日&#xff0c;距离2020年还有最后一个月。在我们度过的日子中&#xff0c;我们应该铭记每一天&#xff0c;每一个日子。讲究仪式感的人&#xff0c;才是生活真正的智者。那么&#xff0c;对于2020年的日历&#xff0c;应…

容器中apscheduler不执行_APScheduler:定时任务框架

APScheduler:定时任务框架安装文档: https://apscheduler.readthedocs.io/en/stable/userguide.html安装$ pip install apscheduler>>> import apscheduler>>> apscheduler.version3.6.3组件APScheduler由一下四部分组成triggers:触发器,指定定时任务执行的时…

织梦php网站修改教程,织梦DEDEcms织梦软件模型增加图集功能教程(含修改文件下载)...

这篇文章主要为大家详细介绍了织梦DEDEcms织梦软件模型增加图集功能教程(含修改文件下载)&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。织梦DEDEcms织梦软件模型增加图集功能,这是今天361模板要给大家分享的。下…

nikita popov php,PHP中对performance的考虑点

Nikita Popov 在他的演讲中谈了几个PHP 程序中和performance相关的point。1.PHP使用shared memory, preload的方式事先分配&#xff0c;而只有在所有的处理结束之后&#xff0c;share memory 才会断开和所有进程或者thread之间的联系。光是opcode&#xff0c;FPM的设定还不足以…

优化matlab作业,现代设计优化算法MATLAB实现

开篇语前阵子做现代设计方法的时候&#xff0c;发现网上很是缺乏这种作业形式的简易算法实现&#xff0c;所以特地来简书写一篇。有两份&#xff0c;一份是我的(说来惭愧&#xff0c;我的大部分都是在网上找的代码&#xff0c;然后在自己的电脑上跑一次&#xff0c;跑出来了就行…

多因子选选股MATLAB代码,金工研报:利用卷积神经网络进行多因子选股

首先&#xff0c;我们先来看一下通过卷积神经网络选股模型的整体流程&#xff0c;然后再根据每一步流程进行介绍&#xff0c;具体如下图所示&#xff1a;1、数据获取用于历史回测数据来自所有A股股票&#xff0c;其中剔除了ST股以及上市3个月的股票&#xff0c;另外&#xff0c…

matlab bad apple,【bad apple】matlab制作矩阵苹果~

有屏幕的地方就有bad apple那么作为一名工科生&#xff0c;熟练的操♂作马桶萝卜(matlab)是一项基本技能下面开始讲解如何用matlab制作别具一格的“矩阵苹果”~实验环境matlab R2018a原版bad apple视频技术要求可以即时演算图形可以将处理后的每帧图形合并成新的视频先上代码%t…

服务器ip直接访问php怎么写,php - 如何实现用公网ip访问到服务器上的网页?

服务器系统是Windows Server 2012 R2&#xff0c;已经部署了IIS、PHP和MySQL&#xff0c;能够在云服务器上通过localhost打开php网页&#xff0c;(放在服务器wwwroot上的index.php)已在ISS管理器中添加网站&#xff0c;但编辑网站绑定时&#xff0c;在ip地址中填入了服务器的公…

vb6 打印选项对话框_图纸打印次数太多,不知道哪次才是最新的?用打印戳记区分效果好...

原创&#xff1a;就说我在开发区使用AutoCAD从事设计工作的朋友们不知道有没遇到过这种情况&#xff1a;图纸在反复修改打印的过程中&#xff0c;由于图纸内容高度相似&#xff0c;往往搞不清究竟哪个才是最新版本的图纸了。这种情况下&#xff0c;细致入微地去核对非常麻烦&am…

安卓文本编辑器php cpp,用安卓原生控件封装一个简易的富文本编辑器

最近接到项目需求&#xff1a;移动端原生写一个富文本编辑器。 ( ⊙ o ⊙ )从没遇到过富文本要用原生写的&#xff0c;然后就查阅各种资料。然后结合自己的思路&#xff1a;其实安卓的富文本编辑器就是一个 “容器”。那么接下来我就带给大家说一说我自定义这个富文本编…

vue tab切换_iviewUITabs选项卡切换组件

概述 选项卡切换组件&#xff0c;常用于平级区域大块内容的的收纳和展现。源码地址&#xff1a;https://github.com/iview/iview/tree/2.0/src/components/tabs使用&#xff1a; 标签一的内容标签二的内容标签三的内容标签二的内容在源码的tabs文件下有三个文件&#xff1a;ind…

paypal创建订单后怎么获得id_5步创建Facebook商店(最新版教程)学习如何在Facebook上卖货...

请按照以下步骤设置Facebook商店&#xff1a;步骤1&#xff1a;转到您的Facebook页面并配置Shop页面。步骤2&#xff1a;设置您的商店详细信息。步骤3&#xff1a;配置付款。步骤4&#xff1a;将产品添加到您的Facebook商店。步骤5&#xff1a;管理您的订单。步骤6&#xff1a;…

创建索引名称已由现有对象使用_Excel编程周末速成班第3课:Excel对象模型

学习Excel技术&#xff0c;关注微信公众号&#xff1a;excelperfect导语&#xff1a;为了帮助想要快速学会Excel VBA的朋友&#xff0c;特以《Excel Programming Weekend Crash Course》这本书为基础&#xff0c;开始整理一系列资料&#xff0c;在完美Excel社群上分享。一共有3…

socket用起始码分割_常用条码Code128码及EAN13码的介绍

在条码打印软件中&#xff0c;设计条码标签时经常用到的码制是Code128码和EAN13码。因为这两种码制比较贴近我们的生活。比如&#xff1a;我们去超市购物&#xff0c;商品上贴的条码标签都是EAN13码&#xff0c;因为EAN13码多用于零售产品包装。而code128码多用于工厂产线&…

matlab在c盘有缓存文件夹吗,win10如何清除C盘缓存文件-win10清除C盘缓存的方法 - 河东软件园...

在电脑的使用过程中我们会发现磁盘的容量会不断减小&#xff0c;更多时候其他磁盘还有很多剩余空间&#xff0c;C盘的存储空间就已经达到极限了。其实在系统的升级和软件的下载中很多文件就会默认储存在C盘&#xff0c;时间久了以后&#xff0c;C盘不仅有软件文件&#xff0c;还…