processing判断一个点(鼠标事件)是否在三角形、圆、椭圆、矩形内之第二章(超详细鼠标交互)
第二篇更新啦!!!!
上一篇我们详细地讲了processing判断点击是否在三角形和圆内,这一期我们主要讲如何判断点击在椭圆和矩形内部,喜欢就麻烦点赞加关注吧,谢谢噢,你的支持是我继续创作的动力!!!
上一期
圆和三角形看这里
最新一期:直接上processing+Arduino代码,实现软硬件结合
目录
一:如何判断点击是否在椭圆内:
(一)椭圆与点的关系:
方法一:
方法二:
(二)实现
在这里有一个易错点:
x轴——方法一代码:(表达式实现)
x轴——方法二代码:(|MF1|+|MF2|=2a实现)
y轴——方法一代码:(表达式实现)
y轴——方法二代码:(|MF1|+|MF2|=2a实现)
二、如何判断点击点是否在矩形内
强调一下噢,上一篇是重点讲解processing判断点击是否在三角形和圆内,这一篇重点讲解如何判断点击是否在椭圆和矩形内部,
话不多说,上干货:
一:如何判断点击是否在椭圆内:
我们在高中都学过椭圆的表达式:(焦点在x轴,后面我们都是以焦点在x轴作讲解,焦点在y轴同理)
那么我们是否可以根据此表达式算出点与椭圆的关系呢?
当然可以啦,如果大家忘记椭圆的相关信息了,没关系,下面我会详细讲解,不用担心!!!
(一)椭圆与点的关系:
无非就三点:1、点在椭圆上;2、点在椭圆内;3、点在椭圆外。
方法一:
1、点在椭圆上:
把点的坐标(x,y)代入椭圆表达式,如果结果等于1,那么就在椭圆的边上。
2、点在椭圆内:
把点的坐标(x,y)代入椭圆表达式,如果结果小于1,那么就在椭圆的里面。
3、点在椭圆外:
把点的坐标(x,y)代入椭圆表达式,如果结果大于1,那么就在椭圆的外面。
方法二:
除了用表达式,我们还可以用距离:
我们知道椭圆两个焦点F1(-c,0),F2(c,0),如果此时有椭圆上一个点M(x1,y1)那么就有:
如果一个点不在椭圆上即在椭圆外或内是什么样呢?
椭圆外:
明显当点在椭圆外:|MF1|+|MF2| > 2a
椭圆内:
明显当点在椭圆外:|MF1|+|MF2| < 2a
综合上述,我们也可以用椭圆的定义做
(二)实现
我们又知道在processing中画椭圆与画圆是同一个函数:
ellipse(x,y,2a,2b);//y轴:ellipse(x,y,2b,2a);
那么在(一)中叙述的方法,不管是方法一还是方法二,都只需要知道点击点的坐标(mouseX,mouseY)和椭圆的,a、b/c即可,那么这个我们能不能知道呢?当然可以
由上面那个代码我们看到第一二个参数是我们椭圆的中心点,而第三四个参数就是椭圆的2a,2b,(记住是二倍窝) ,又有:,那么c我们也可以直接求出来啦,当然方法一并不需要求c,所以我这里的代码就重点展示方法一,对于方法二的话,各位朋友只需要代入公式求出c,然后再像我上一篇讲的那样,用两点距离公式求线段长度,再套入公式计算比较就可以啦,非常容易实现!!!
在这里有一个易错点:
我们的表达式是基于椭圆中心点是在原点,焦点是在x轴上实现的,而processing中的坐标原点是在左上角的,所以在编写代码的时候要注意把鼠标点击的坐标减去中心点的值也就是mouseX-x(中心点坐标),mouseY-y(中心点坐标),可以理解就是将我们的抽象地认为我们已经把椭圆、鼠标挪回了原点,因为我们的a,b是一个静值,所以挪的只是鼠标点就可以了,mouseX-x(中心点坐标),mouseY-y(中心点坐标)就是一个把点击点mouse往x轴移动了x,往y轴移动了y,从而回到了相对坐标系的原点,话不多说,上代码:
x轴——方法一代码:(表达式实现)
void setup(){size(300,300);//300*300的画布
}
void draw() {fill(0,0,255);//蓝色ellipse(150,150,80,50);//画了一个中心点在(150,150),a=40,b=25的椭圆
}
void mouseClicked(){float x1=mouseX-150;//抽象挪回原点,一定要用floatfloat y1=mouseY-150;float tuo=sq(x1/40)+sq(y1/25);//表达式计算println(mouseX,mouseY,tuo);//输出鼠标点击位置,及计算结果if(tuo<=1){//在椭圆内println("Inside ellipse");}else{//在椭圆外println("Outside ellipse");}}
有我没说明白的部分请后台私信我噢,也欢迎大家找我交流学习!!!谢谢!!!
运行效果:
x轴——方法二代码:(|MF1|+|MF2|=2a实现)
这个就不如方法一简单了,首先要用公式计算出c,从而确定F1,F2的坐标,再用公式计算 |MF1| 和 |MF2| ,最后再用判断语句判断与2a的关系,这就是编程思路,当然还要注意坐标系的问题,上代码:
void setup(){size(300,300);
}
void draw() {fill(0,0,255);ellipse(150,150,80,50);
}
void mouseClicked(){float x1=mouseX-150;float y1=mouseY-150;float c=sqrt(sq(80/2)-sq(50/2));float MF1=sqrt(sq(x1+c)+sq(y1-0));float MF2=sqrt(sq(x1-c)+sq(y1-0));println(mouseX,mouseY,MF1,MF2,c);if(MF1+MF2<=80){println("Inside ellipse");}else{println("Outside ellipse");}}
运行效果:
一样正常判断
以上就是基于processing判断鼠标点击点是否在一个焦点在x轴的过程啦!!!
y轴——方法一代码:(表达式实现)
表达式:所以就只需要换一下x,y的计算位置就好啦!!!
void setup(){size(300,300);
}
void draw() {fill(0,0,255);//ellipse(150,150,80,50);ellipse(150,150,50,80);
}
void mouseClicked(){float a=mouseX-150;float b=mouseY-150;//float tuo=sq(a/40)+sq(b/25);float tuo=sq(b/40)+sq(a/25);//表达式计算改了println(mouseX,mouseY,tuo);if(tuo<=1){println("Inside ellipse");}else{println("Outside ellipse");}}
运行效果:
y轴——方法二代码:(|MF1|+|MF2|=2a实现)
void setup(){size(300,300);
}
void draw() {fill(0,0,255);//ellipse(150,150,80,50);ellipse(150,150,50,80);
}
void mouseClicked(){float x1=mouseX-150;float y1=mouseY-150;float c=sqrt(sq(80/2)-sq(50/2));float MF1=sqrt(sq(x1-0)+sq(y1+c));//只改坐标即可float MF2=sqrt(sq(x1-0)+sq(y1-c));println(mouseX,mouseY,MF1,MF2,c);if(MF1+MF2<=80){println("Inside ellipse");}else{println("Outside ellipse");}}
运行效果:
以上就是基于processing判断鼠标点击点是否在一个焦点在y轴的过程啦!!!
至此判断点击点是否在椭圆内部的讲解到此结束啦,有疑惑的记得私信我噢,进我主页说不定后面也有更新!!!
前调一次:想看判断一个点是否在三角形、圆内部的请看我的另一篇:http://t.csdn.cn/2gBLthttp://t.csdn.cn/2gBLt
二、如何判断点击点是否在矩形内
矩形就相对比较简单啦,不像前面介绍的那么复杂,因为矩形是一个非常规则的图形,只需要掌握其x,y坐标的范围就已经可以直接确定他的位置啦,直接上代码:
画矩形的两种方法:
rect(x, y, a, b);
quad(x1,y1,x2,y2,x3,y3,x4,y4);
说明:rect这个方法的第一二个参数是矩形左上角坐标值,a,b分别是x,y轴上的长度
quad:比较复杂,如图:
代码:
void setup(){size(300,300);
}
void draw() {fill(255,0,0);rect(100, 100, 10, 100);
}
void mouseClicked(){if((mouseX>=100)&(mouseX<=200)&(mouseY>=100)&(mouseY<=200)){println("Inside rectangle");}else{println("Outside rectangle");}
}
运行效果:
processing判断一个点(鼠标事件)是否在三角形、圆、椭圆、矩形内之第二章(超详细鼠标交互)相关推荐
- android 经纬度的范围内,在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内...
在lbs开发中,可能要碰到这样的问题,如何判断一个指定的经纬度点是否落在一个多边形区域内,比如我在地图上画了一个多边形区域,然后给出一个经纬度点,怎样判断这个点是否在这个多边形范围之内,由于我用的是a ...
- 在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内
在lbs开发中,可能要碰到这样的问题,如何判断一个指定的经纬度点是否落在一个多边形区域内,比如我在地图上画了一个多边形区域,然后给出一个经纬度点,怎样判断这个点是否在这个多边形范围之内,由于我用的是a ...
- html 轮播图的鼠标事件,这是图片轮播的代码 html+css,怎么加上鼠标悬停移出继续功能?...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 .one { position: absolute; width: 500px; height: 400px; overflow: hidden; } . ...
- jquery 事件绑定及取消 bind live delegate on one区别 (超详细且通俗易懂)
on bind delegate live one 四种方法差别不是特别大 bind讲完后,后面的方法只会说不同点 1.bind() $(selector).bind(event,data,funct ...
- 奥利给!搞定JVM就靠它了!不看感觉错过一个亿!吐血整理两个月,原创!全网第一份超详细JVM知识点导图!!!
一.本人原创整理,基于尚硅谷教学视频以及深入理解Java虚拟机 导图地址请查看评论 二.导图总体如下,每一章节,每一个细节点,都有超级详细的记录.以及一些图示,代码等. 1.总体概图,已经有6.8k浏 ...
- Python,OpenCV鼠标事件进行矩形、圆形的绘制(随机颜色、随机半径)
Python,OpenCV鼠标事件进行矩形.圆形的绘制(随机颜色.随机半径) 1. 效果图 2. 源码 参考 这篇博客将介绍鼠标事件,并介绍鼠标事件矩形.圆形的绘制: 所有的鼠标事件(左键按下.左键释 ...
- QMouseEvent鼠标事件简介
一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...
- qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介
一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...
- ncurses鼠标事件:mousemask(),ALL_MOUSE_EVENTS,KEY_MOUSE,getmouse(),mouse_grafo(),wmouse_trafo()
Copyright(C) NCURSES Programming HOWTO 使用鼠标 你现在已经知道如何取得键盘的输入了,那现在让我们也来取得鼠标的输入.因为很多用户界面程序都支持使用键盘和鼠标的共 ...
最新文章
- Python数据挖掘2:pandas使用:Series一串数字和DataFrame数据框
- 解决Cesium无法加载出地球的问题
- 是什么包_包粽子教程,喜欢的收藏,以后想吃什么样的都可以自己包
- Linux内核分析06
- Windows 7 硬盘安装方法
- 删掉SQL Server登录时登录名下拉列表框中的选项
- AR的一些常见的操作
- php mysql 一级分类_无限级分类 for PHP+Mysql
- Git submodule 特性
- 后台报错java.lang.IllegalArgumentException: Invalid character found in the request target.
- Apache Log4j任意代码执行漏洞安全风险通告第三次更新
- remote Incorrect username or password ( access token ):用户名或密码不正确(访问令牌)
- Android 实现RecyclerView长按弹出Menu 点击删除
- lock.ReadWriteLock使用方法
- win8虚拟机_VMware15虚拟机软件安装包+安装教程
- Python变量:声明,连接,全局和本地
- 《人性的弱点》25句经典语录
- Android 项目必备(五)--> Android Studio 制作 App 的 logo 图标
- 2021/8/12 网络机顶盒
- [渝粤教育] 西南科技大学 建筑CAD 在线考试复习资料(1)
热门文章
- 基于Spring boot的个人理财系统
- 27岁,没有学历,没有技术,大家有什么好的职业发展建议吗?
- 对瑞星免费后的使用初体验
- 罗马第一大学计算机好不好,我行我素!罗马第一大学的自由进出!照样还是那么多!...
- 看论文文献要如何做笔记?
- Prometheus 存储层的演进
- 根据两个坐标点计算旋转角度
- 胜利vs50线跟vs100线区别_几种典型K线组合形态图解分析、遇见这样的K线组合要赚大钱!...
- 【每日一读】Dynamic Structural Role Node Embedding for User Modeling in Evolving Networks
- 当马赛克被AI看穿,我们的隐私将藏于何处?