Android计算点击坐标是否在圆内和椭圆内

2024-06-10 13:12

本文主要是介绍Android计算点击坐标是否在圆内和椭圆内,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近工作需要,顺带学了波数学。

要判断点是否在圆内,可以使用圆的几何性质:如果点的坐标(x, y)满足(x - 圆心x)^2 + (y - 圆心y)^2 < 半径^2,则该点在圆内。

计算点击坐标是否在圆内

// 圆的半径
float radius =circleView.getWidth() / 2;
// 按下的坐标
float touchX = event.getX();
float touchY = event.getY();float distanceX = Math.abs(touchX - radius);
float distanceY = Math.abs(touchY - radius);
//是否在圆内
if ((distanceX * distanceX + distanceY * distanceY) > radius * radius) {// 在圆外return false;
} else {// 在圆内return true;
}

计算点击坐标是否在椭圆内

在Android中,你可以使用椭圆的标准方程来判断一个点是否在椭圆内部。椭圆的标准方程如下:
其中,(h, k) 是椭圆的中心点,a 和 b 分别是椭圆的长轴和短轴。
如果一个点 (x, y) 满足这个方程,那么这个点就在椭圆内部。如果不满足,那么这个点就在椭圆外部。

float radiusX = mOvalWidth / 2f;
float radiusY = mOvalHeight / 2f;
// 椭圆的中心点 centerX  centerY
float centerX = mOvalWidth / 2f;
float centerY = mOvalHeight / 2f;
float touchX = event.getX();
float touchY = event.getY();
//是否在圆内  因为是裁剪居中的椭圆,所以touchX需要平移到对应位置
if (!isPointInEllipse(touchX , touchY, centerX, centerY, radiusX, radiusY)) {// 在圆外return false;
}else{// 在圆内return true;
}// 判断点(x, y)是否在椭圆内
public boolean isPointInEllipse(float x, float y, float centerX, float centerY, float radiusX, float radiusY) {// 计算点到椭圆中心的距离的平方float distanceSquared = (x - centerX) * (x - centerX) / (radiusX * radiusX) + (y - centerY) * (y - centerY) / (radiusY * radiusY);// 判断点到椭圆中心的距离的平方是否小于或等于1,即半径的平方。// 注意:这里不是开方,因为计算距离的平方比计算距离本身更高效。return distanceSquared <= 1;
}

因为显示在界面上的效果,实际上只是椭圆的一部分。所以椭圆整体是大于手机显示的。
在计算touchX、touchY点的时候,需要根据你们实际显示的区域,去做对应的平移,使点击的Touch值,是点击在椭圆上真实的touch值,而不是根据当前屏幕坐标按下的touch值。

float radiusX = mOvalWidth / 2f;
float radiusY = mOvalHeight / 2f;
// 椭圆的中心点 centerX  centerY
float centerX = mOvalWidth / 2f;
float centerY = mOvalHeight / 2f;
float touchX = event.getX();
float touchY = event.getY();
// 因为椭圆是裁剪显示的,需要把点击X换算成正确的点击坐标。 transX是计算touchX应该相对于椭圆的真实的touch值
float transX = (mOvalWidth - mScreenWidth) / 2f;
//是否在圆内  因为是裁剪居中的椭圆,所以touchX需要平移到对应位置
if (!isPointInEllipse(touchX + transX, touchY, centerX, centerY, radiusX, radiusY)) {// 在圆外return false;
}// 判断点(x, y)是否在椭圆内
public boolean isPointInEllipse(float x, float y, float centerX, float centerY, float radiusX, float radiusY) {// 计算点到椭圆中心的距离的平方float distanceSquared = (x - centerX) * (x - centerX) / (radiusX * radiusX) + (y - centerY) * (y - centerY) / (radiusY * radiusY);// 判断点到椭圆中心的距离的平方是否小于或等于1,即半径的平方。// 注意:这里不是开方,因为计算距离的平方比计算距离本身更高效。return distanceSquared <= 1;
}

这篇关于Android计算点击坐标是否在圆内和椭圆内的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048252

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动