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

相关文章

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

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