本文主要是介绍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计算点击坐标是否在圆内和椭圆内的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!